我有一个函数可以在读取另一个文件时将随机数写入文件。
void writeFile() {
FILE* file = fopen(source, "r");
FILE* file2 = fopen(target, "w");
srand (time(NULL));
while (!feof(file)) {
fgetc(file);
fputc(0 + ( rand() % ( 50 - 0 + 1 ) ), file2);
}
fclose(file);
fclose(file2);
}
这两个文件应该具有相同的大小。结果是,与第一个文件相比,第二个文件的末尾有更多的1byte。我怎么能避免这个?
答案 0 :(得分:2)
除了EOF注释外,您还应该以二进制模式打开这两个文件
FILE* file = fopen(source, "rb");
FILE* file2 = fopen(target, "wb");
在非二进制模式下,可以翻译行结尾(取决于平台)。这可能会更改读取或写入文件的字符数。
答案 1 :(得分:1)
不要依赖feof
告诉您已阅读所有字符。而是检查fgetc
的返回值:
while (fgetc(file) != EOF) {
fputc(0 + ( rand() % ( 50 - 0 + 1 ) ), file2);
}
答案 2 :(得分:1)
最后fgetc(file)
读取EOF,然后您的代码将一个字节写入新文件,只有然后它会在feof
中测试while
}。
请勿使用feof
,请改用:
if (fgetc(file) == EOF) break;