2012-06-27 40 views
0

我使用的fread讀入一個字符緩存器編號。的fread()返回的讀出字節+ 1

char buffer[50]; 
int nbytes = fread(buffer, 1, 50, fp); 

我從讀取的文件實際上包含了字你好,即5個字節。 在上例中,nbytes等於6.爲什麼?

此外,從零字節文件讀取(即它是空的)返回0

+0

也許它添加0終止? – 2012-06-27 19:33:09

+2

該文件是否包含換行符? –

+1

'fread()'和'fwrite()'返回成功讀取或寫入的項目數。說他們返回一些字節是不正確的。雖然在你的情況下,因爲元素大小是1,但它是相同的。但仍然。 – 2012-06-27 19:35:37

回答

4

我的猜測是,無論寫給你正在閱讀的文件可能包含在一個換行符(如果它是一個文本文件)或字符串後的0個字節。如果您在UNIX上,運行以下命令:

od -c filename 

,它將打印包括非printables文件的全部內容。

您還可以運行:

wc --bytes filename 

,它將打印文件的字節長度(連同文件名)。

+1

嘗試'xxd文件名'獲取更多信息。另外'--bytes'可能不能作爲所有平臺上的一個'wc'的說法,更喜歡'-c' – pb2q

+0

的確。它看起來像* gedit *正在向文件添加換行符,但不會在編輯器中顯示它。謝謝! –

相關問題