2013-05-05 411 views
0

我定義了一個數組:char數組的strlen大於它的大小。如何避免?

char arr [1480];

現在,我從一個文件中讀取了1480個字符並放入arr(通過執行arr [i] = c)。 我知道1480個字符,因爲我使用while循環來讀取一個字符一次(istream.get())並停止當增量索引= 1480.

然後,我做strlen(數組)和它返回1512.怎麼回事?這隻發生在某些場合,但不是在所有情況下,即使每次我從檔案中讀取,我總會讀到1480個字符。

我的疑問是一個char可能佔據1個單位(由strlen(arr)返回的單位)。 如果是這樣,我該如何解決這個問題?

由於

PS:我問一個問題早先我的指針被garbaged,這是原因時,我有長度的緩衝液(ARR)> 1480

+1

你可能不是終止數組 - arr [1479] ='\ 0''。 – Yuushi 2013-05-05 04:11:02

回答

6

陣列大小必須包括字符串終止符。由於您讀取數組的大小,所以您不能(也不)添加字符串終止符。 strlen函數和所有其他字符串函數使用字符串結束符來查找字符串的結尾。如果不存在,它會一直持續到找到它。

如果字符串中的字符數不超過1480個,則應該有一個大小爲1481的數組,最後是字符串終止符'\0'

+0

這是正確的答案。 – playerone 2013-05-05 04:12:26

+0

它是'\ 0'還是'\\ 0'?在下面這個例子中,他們使用後者:http://www.learncpp.com/cpp-tutorial/912-shallow-vs-deep-copying/ – Simo 2013-05-05 04:36:34

+0

@Simo:''\\ 0''幾乎總是一個錯誤;它是一個不可移植的多字符字符常量。網頁上的例子是一個錯誤。 – 2013-05-05 04:54:20

0

試試這樣寫?只是一點樣品

char arr[1481]=0x00; //define all the array with string terminator 
memcpy(arr,BufCopyFrom, 1480); //BufCopyFrom is the Buffer being copied and specified to copy 1480 bytes. 

希望它有幫助。