文件IO-fwrite-fread-fscanf-fflush
fwrite
- 把 ptr 所指向的数组中的数据写入到给定流 stream 中。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
参数 - ptr -- 这是指向要被写入的元素数组的指针。
- size -- 这是要被写入的每个元素的大小,以字节为单位。
- nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
返回值
- 如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
#include<stdio.h>
int main ()
{
FILE *fp;
char str[] = "This is runoob.com";
fp = fopen( "file.txt" , "w" );
fwrite(str, sizeof(str) , 1, fp );
fclose(fp);
return(0);
}
fread
- 从给定流 stream 读取数据到 ptr 所指向的数组中。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
参数
- ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
- size -- 这是要读取的每个元素的大小,以字节为单位。
- nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
返回值
- 成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char c[] = "This is runoob";
char buffer[20];
/* 打开文件用于读写 */
fp = fopen("file.txt", "w+");
/* 写入数据到文件 */
fwrite(c, strlen(c) + 1, 1, fp);
/* 查找文件的开头 */
fseek(fp, 0, SEEK_SET);
/* 读取并显示数据 */
fread(buffer, strlen(c)+1, 1, fp);
printf("%s\n", buffer);
fclose(fp);
return(0);
}
> This is runoob
#include <stdio.h>
int main()
{
// 使用 "rb" 读取二进制方式打开文件
FILE *p = fopen("D:\\a.txt", "rb");
// 用于接收读取数据的缓冲区
char buffer[1024] = {0};
// buffer : 将文件读取到内存的位置
// sizeof(char) : 读取的基本单元字节长度
// sizeof(buffer) : 读取的基本单元个数,
// 读取字节个数是 sizeof(buffer) * sizeof(char)
// p : 文件指针
fread(buffer, sizeof(char), sizeof(buffer), p);
// 打印读取的内容
printf("buffer = %s\n", buffer);
return 0;
}
fscanf
- int fscanf(FILE *stream, const char *format, ...)
#include <stdio.h>
#include <stdlib.h>
#define TXT "str.txt"
// 文件流方式
void file_function(void)
{
char buf[16] = {0}; // ?
FILE *fp = fopen(TXT, "r");
if (fp == NULL){
perror("fopen error");
exit(-1);
}
// 只能按照指定长度读取数据
//fread(buf, sizeof(char), sizeof(buf), fp);
// 一行一行的读取字符串
fscanf(fp, "%s", buf);
printf("buffer = %s\n", buf);
fscanf(fp, "%s", buf);
printf("buffer = %s\n", buf);
fclose(fp);
}
int main(void)
{
file_function();
return 0;
}
sprintf
- 发送格式化输出到 str 所指向的字符串。
int sprintf(char *str, const char *format, ...)
返回值
- 如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
#include <stdio.h>
#include <math.h>
int main()
{
char str[80];
sprintf(str, "Pi 的值 = %f", M_PI);
puts(str);
return(0);
}
> Pi 的值 = 3.141593
fflush
- 刷新流 stream 的输出缓冲区。
int fflush(FILE *stream)
参数
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个缓冲流。
返回值
- 如果成功,该函数返回零值。如果发生错误,则返回 EOF,且设置错误标识符(即 feof)。