程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C Traps and Pitfalls(1)

C Traps and Pitfalls(1)

編輯:關於C語言


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的博客”
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved