[英]Write chars into file 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。 如何避免這種情況?
除了EOF注釋之外,您還應該以二進制模式打開兩個文件
FILE* file = fopen(source, "rb");
FILE* file2 = fopen(target, "wb");
在非二進制模式下,行尾可以翻譯(取決於平台)。 這可能會更改讀取或寫入文件的字符數。
不要依靠feof
的東西告訴你已經閱讀了所有字符。 相反,請檢查fgetc
的返回值:
while (fgetc(file) != EOF) {
fputc(0 + ( rand() % ( 50 - 0 + 1 ) ), file2);
}
最后的fgetc(file)
讀取EOF,然后您的代碼將其寫入新文件中的一個字節, 然后才在while
測試feof
。
不要使用feof
,而是使用以下代碼:
if (fgetc(file) == EOF) break;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.