我只是在学习如何使用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",因为它是关于保存一个游戏的信息,它不应该删除关闭程序或再次运行它。
发布于 2016-01-21 21:34:16
最有可能导致问题的原因是使用"ab"打开文件并不会截断它,因此您将附加到同一个文件中,并继续读取任何不正确的输出。
此外,您的代码有几个问题:
gets()。它被从C标准中删除,因为不能告诉它缓冲区有多大,因此不能安全地使用。feof(),因为它没有执行您认为它所做的事情。它只能告诉您是否遇到了流函数所遇到的文件结束,该流函数实际上试图通过它读取文件。您可以简单地测试来自fread的返回值。main的原型要么是int main(void) of int main(int argc, char *argv[])str2数组结束后读取。以下是修正后的版本:
#include <stdio.h>
int main(void) {
char str2[100][400];
FILE *load = fopen("save.dat", "rb");
if (!load) {
printf("cant open file!\n");
return 1;
}
for (int i = 0; i < 100 && fread(str2[i], sizeof(char), 40, load) == 40; i++) {
puts(str2[i]);
printf("\n");
}
fclose(load);
return 0;
}https://stackoverflow.com/questions/34934450
复制相似问题