代碼:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main()
{
FILE* fp = fopen("aaa.txt", "rb+");
if (fp == NULL) {
return;
}
if (_fseeki64(fp, 0, SEEK_END) != 0) {
return;
}
long long size = _ftelli64(fp);
if (size < 0) {
return;
}
if (_fseeki64(fp, 0, SEEK_SET) != 0) {
return;
}
char buf[1024];
if (fread(buf, 20, 1, fp) != 1) {
return;
}
if (fwrite("test", 5, 1, fp) != 1) {
return;
}
fclose(fp);
}
aaa.txt的內容(剛好20個字節):
aaaaaaaaaaaaaaaaaaaa
vc2010和vc2015結果都一樣,在fwrite那裡出錯。期望fwrite返回1,實際返回0。errno為0。
實在想不出原因,請教一下大家。多謝幫忙。
好了終於找到原因了。參見資料:http://stackoverflow.com/questions/23843587/fwrite-doesnt-work-directly-after-fread
fread之後不能直接用fwrite,反過來也一樣。必須先調用一次fseek才行,而且要注意fseek的_Origin這個參數要是SEEK_SET或者SEEK_END,不能用SEEK_CUR。
這麼牛逼的設定,C標准庫的文檔中居然沒有提到半個字,出錯了得到的errno還是0。害我調了2個多小時。真是見鬼了。