新終止字符串在C文件,試圖通過FREAD讀取文件功能FREAD不是 0
下面是該文件的內容:使用
line1 how
代碼:
char c[6];
fread(c,1,5,f1)
輸出var'c'時,內容在結尾處顯示爲隨機字符(例如:line1 *)
Does f閱讀不終止字符串或我錯過了什麼?
新終止字符串在C文件,試圖通過FREAD讀取文件功能FREAD不是 0
下面是該文件的內容:使用
line1 how
代碼:
char c[6];
fread(c,1,5,f1)
輸出var'c'時,內容在結尾處顯示爲隨機字符(例如:line1 *)
Does f閱讀不終止字符串或我錯過了什麼?
編號fread
函數只是讀取一些元素,它沒有「字符串」的概念。
fgets
/fscanf
代替個人而言,我會去與fgets
。
對於那些感興趣的,從fgets中刪除換行的示例實現在這裏給出:http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input – 2012-10-19 17:57:49
man page for fread沒有提到在文件末尾添加終止零。
如果您想要安全,請將c數組中的所有字節初始化爲零(通過bzero或類似的東西),並且在您讀入時,您將有一個終止空值。
我已經鏈接fread
和bzero
的兩個手冊頁,我希望能幫到你。
對不起,我有點遲到派對。
不,fread不會爲您處理這個問題。它必須手動完成。 幸好它不難。 我喜歡用FREAD()的返回到設置NUL像這樣:
char buffer[16+1]; /*leaving room for '\0' */
x = fread(buffer, sizeof(char), 16, stream);
buffer[x]='\0';
,現在你必須自己一個\ 0結束的字符串,並作爲獎勵,我們有一個漂亮的變量x,這實際上如果我們稍後需要,可以節省運行strlen()的麻煩。整齊!
'fread'只將字節讀入緩衝區。它對你所說的字符串一無所知。 – 2012-01-15 11:45:31