fread,fwrite(一)

头文件
<stdio.h>
函数原型
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

函数意思
fread 从stream读取内容放到ptr指向的内存中,读取nmemb次,每次读取size大小
fread 从ptr指向的内存中,读取nmemb次,每次读取size大小,写入到文件中

每次查函数原型时仅仅根据函数名字无法知道哪个读取次数,哪个是每次读取大小,所以我修改一下,方便自己理解
size_t fread(void *ptr, size_t each_time_size, size_t times, FILE *stream);
size_t fwrite(const void *ptr, size_t each_time_size, size_t times, FILE *stream);

顺便一提,函数不会自动加字符串结束符
小demo

int main(void)

{

char arr[10] = { 0 };

FILE* file = fopen("a.txt", "rb");

fread(arr, sizeof(arr), 1, file); // 这里改为sizeof(arr) - 1 可以预留结束符

printf("%s ", arr);

fclose(file);

return 0;

}

a.txt文件内容如下
123456789abcd
123456
abcde
123456
abcde

结果
123456789a

文件保持不变

int main(void)

{

char arr[30] = { 0 };

FILE* file = fopen("a.txt", "rb");

fread(arr, 10, 2, file); // 读取20个

printf("%s ", arr);

fxlose(file);

return 0;

}

结果
123456789abcd
123456
一共20个字符(字符d后面有个 )

fwrite
文件清空后

int main(void)

{

char arr[10] = "abcde";

FILE* file = fopen("a.txt", "r+");

fwrite(arr, strlen(arr), 1, file);

fwrite(arr, sizeof(arr) - 1, 1, file); // 会向文件写入字符串结束符

fclose(file);

return 0;

}

结果如下

感觉文件不支持这个

原文地址:https://www.cnblogs.com/goodluck14/p/13191787.html