将字符写入文件C ++

时间:2013-12-01 22:20:40

标签: c++

我有一个函数可以在读取另一个文件时将随机数写入文件。

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。我怎么能避免这个?

3 个答案:

答案 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;