我正在学习使用FILE
。我的问题是:
当我想读取由fopen("example.dat", "ab")
打开的二进制文件时,它显示如下内容:
但是当我按fopen("example.dat", "wb")
打开文件时,它可以正常工作!
以下是我的测试程序:
写入文件:
#include <stdio.h>
void main() {
int i = 0;
FILE *save = fopen("save.dat", "wb");
char str[5][40];
while (i < 5) {
gets(str[i]);
fwrite(str[i], sizeof(char), 40, save);
i++;
}
}
阅读:
#include <stdio.h>
void main() {
char str2[100][400];
int i = 0;
FILE *load = fopen("save.dat", "rb");
if (!load) {
printf("cant open file!");
return;
}
fread(str2[i], sizeof(char), 40, load);
while (!feof(load)) {
puts(str2[i]);
printf("\n");
i++;
fread(str2[i], sizeof(char), 40, load);
}
}
我需要"ab"
,因为它是关于保存游戏的信息,它不应该在关闭程序后删除或再次运行。
答案 0 :(得分:2)
问题的最可能原因是使用"ab"
打开文件不会截断它,因此您将附加到同一文件并继续读取首先写入的错误输出。
此外,您的代码有几个问题:
gets()
。它已从C标准中删除,因为无法告知缓冲区有多大,因此无法安全使用。feof()
,因为它没有按照您的想法执行。它只能告诉您实际尝试读取它的流函数是否遇到了文件末尾。您只需测试fread
。main
的原型是[{1}} int main(void)
int main(int argc, char *argv[])
数组的末尾。以下是更正后的版本:
str2