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);
顺便一提,函数不会自动加字符串结束符 \0
小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\n", 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\n", arr);
fxlose(file);
return 0;
}
结果
123456789abcd
123456
一共20个字符(字符d后面有个\n)
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); // 会向文件写入字符串结束符\0
fclose(file);
return 0;
}
结果如下
感觉文件不支持这个\0