2016-02-16 115 views
1

我在寫一個C程序,在我所讀取到的塊大文件(每塊16個字符)。爲此我寫了下面的代碼。這個C程序有什麼問題,文件讀取?

while(fgets(temp2,16,fp)!=NULL) 
{ 
    printf("\n%d:%s, len = %d", cnt++, temp2, strlen(temp2)); 
} 

但它的讀數只有15個字符。這有什麼問題?我該怎麼辦?

回答

5

有什麼不對呢?

什麼都沒有。它正在做你說的。它會讀取多達15個字符,除非遇到新行或文件結束-,然後用空字符結束的最後一個書面剛過字節。

我應該怎麼辦?

閱讀reference for fgets,其中規定:

char *fgets(char *str, int count, FILE *stream);

讀取str中指定的文件流,並將它們存儲在最count - 1字符。生成的字符串始終以null結尾。如果發生文件結尾或發現換行符,則停止解析,在這種情況下,str將包含該換行符。

你可能想用什麼fread,不fgets,因爲你的問題有關閱讀的字符塊,而不是換行分隔字符串會談。

+1

上帝我討厭它,當電腦一直做我已經告訴它做的事情,但做錯了......嗯嗯.... –

+1

它更糟糕的時候,它幾乎總是做什麼,我_think_我告訴它,並且只有經過幾個小時的故障排除後,纔會發現它正在做我實際上已經告訴它的事情......並且它似乎只是做了我認爲由於未定義的行爲而做的事情;-) – paddy

0
fgets

閱讀文檔。在讀入一個

如果您的文件是二進制文件(所以用fopen("/path/to/file","rb")打開它),並且您關心固定大小的塊使用fread