2011-10-25 37 views
3

我正在使用fgetc從文件中讀取字符串。因爲我不知道字符串需要多長時間,我需要爲應該保存數據的數組重新分配空間。爲此,我需要知道當前數組何時已滿。我不太確定char數組是否在讀取字符後終止。所以例如我有一個大小爲8的數組,fgetc會給我第9個字符。數組的大小現在是8還是9? (8個字符+ \ 0或只有8個字符)。有沒有辦法測試它?如果沒有\ 0。當我讀完字符串時,是否需要將它自己添加到char數組中?如何知道字符串是否爲空終止

+1

所有的標準字符串函數都依賴一個NULL字符在那裏,所以是的,你必須添加它,否則你將運行在奇怪的問題 – RageZ

回答

0

由於fgetc每次調用讀取一個字符,要獲取字符串的大小,您應該檢查讀取的字符是\ 0還是EOF到達。如果您看到\ 0字節,則應複製包括\ 0的所有字節。如果在沒有\ 0的情況下到達EOF並且字符計數器大於0,則應該自己添加\ 0。

2

您需要跟蹤緩衝區的當前大小和添加字符的位置。那麼如果該位置等於您需要增加緩衝區的大小。實際大小應爲+1以容納終止的\0字符,您必須始終在讀取最後一個字符後添加該字符。

1

當你使用fgetc的時候,你正在建立一個一個字節地保存字節的內存,所以你需要讓你的內存分配爲總字符串長度+ 1,因爲你需要額外的字節爲'\ 0'。

與「字符串」一起工作的函數實際上正在查看以'\ 0'結尾的字節集合。例如,「Hello World」在內存中存儲爲'H'''''''''''''''''''''''''''''''''''''。這就是函數如何知道何時停止處理字符串。