fread 和 fwrite 不能接连着使用,通常要在他们中间加fseek, 这是为了保持与以前程序的向下兼容性。
如以下程序,无论加不加fseek,都能编译并且执行通过,fread和fwrite都表示完成了任务。然而实际上,如果没有fseek这句话,fwrite并没有将字符写入文件。
view sourceprint 01 #include
02 #include
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 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的博客”