fread 和 fwrite 不能接連著使用,通常要在他們中間加fseek, 這是為了保持與以前程序的向下兼容性。
如以下程序,無論加不加fseek,都能編譯並且執行通過,fread和fwrite都表示完成了任務。然而實際上,如果沒有fseek這句話,fwrite並沒有將字符寫入文件。
view sourceprint?01 #include <cstdio>
02 #include <cstdlib>
03 using namespace std;
04
05 int main()
06 {
07 FILE *fp = fopen("test.txt", "r+");
08 if (NULL == fp)
09 {
10 fprintf(stderr,"open file \"test.txt\" failed");
11 exit(1);
12 }
13 char buf[256] = {0};
14 size_t byteRead = fread(buf, sizeof(char), 10, fp);
15 for (int i=0; i<byteRead; i++)
16 {
17 if (buf[i] > 'a' && buf[i] < 'z')
18 {
19 buf[i] = buf[i] + 'A' - 'a';
20 }
21 }
22 //fseek(fp, -10, 1);
23 size_t byteWrite = fwrite(buf, sizeof(char), byteRead, fp);
24 if (byteRead != byteWrite)
25 {
26 fprintf(stderr, "read and write error");
27 exit(1);
28 }
29 fclose(fp);
30 return 0;
31 }
作者“ChenQi的博客”