2012-01-15 55 views
7

新終止字符串在C文件,試圖通過FREAD讀取文件功能FREAD不是 0

下面是該文件的內容:使用

line1 how 

代碼:

char c[6]; 
fread(c,1,5,f1) 

輸出var'c'時,內容在結尾處顯示爲隨機字符(例如:line1 *)

Does f閱讀不終止字符串或我錯過了什麼?

+1

'fread'只將字節讀入緩衝區。它對你所說的字符串一無所知。 – 2012-01-15 11:45:31

回答

10

編號fread函數只是讀取一些元素,它沒有「字符串」的概念。

  • 您可以添加NUL終止自己
  • 您可以使用fgets/fscanf代替

個人而言,我會去與fgets

+0

對於那些感興趣的,從fgets中刪除換行的示例實現在這裏給出:http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input – 2012-10-19 17:57:49

2

man page for fread沒有提到在文件末尾添加終止零。

如果您想要安全,請將c數組中的所有字節初始化爲零(通過bzero或類似的東西),並且在您讀入時,您將有一個終止空值。

我已經鏈接freadbzero的兩個手冊頁,我希望能幫到你。

1

對不起,我有點遲到派對。

不,fread不會爲您處理這個問題。它必須手動完成。 幸好它不難。 我喜歡用FREAD()的返回到設置NUL像這樣:

char buffer[16+1]; /*leaving room for '\0' */ 
x = fread(buffer, sizeof(char), 16, stream); 
buffer[x]='\0'; 

,現在你必須自己一個\ 0結束的字符串,並作爲獎勵,我們有一個漂亮的變量x,這實際上如果我們稍後需要,可以節省運行strlen()的麻煩。整齊!