2016-03-07 56 views
0

我不得不從一個裝置,該裝置是4個字節長,這樣我已經聲明陣列等最佳實踐聲明字符陣列用C

char data[4] = {0}; 

我將解析這個按指數和保證停止在讀取數據索引3

數據[0] ..數據[3]

在這種情況下,沒有餘地NUL( '\ 0')。

我想知道這被認爲是安全的,或者我應該聲明數組作爲

char data[5] = {0}; 

此數組不會STR *系列的功能一起使用。

+1

這取決於你要用'data'做什麼。某些函數需要最後的''\ 0':'strlen','strchr','strcpy' ...有些不會:'memcpy',... – purplepsycho

+1

真的那一個額外的字節會成爲什麼?恕我直言,是安全的,是白癡的證明,去與5 –

+0

'char data [5];'然後'memset(數據,0,sizeof數據);'。 – i486

回答

3

如果要讀取的數據是4字節的字符串,或者如果它比4字節,而且您正在使用char作爲一個字符數組,而不是字符串,則沒有必要擔心。否則,你必須關心'\0'

1

使用char data[4];爲4個字節的數據應該是安全的,如果你不會使用與像strcmp()strlen()或數據%s符的printf()字符串處理函數。

1

一些規則,我使用:

  • 要存儲串,應爲\0焦炭分配1個字節以上。例如char arr[len+1];

  • 要存儲除字符串以外的固定大小數據,請儘可能多地分配。例如char data[len];

  • 如果它很大,並且大小動態變化,那麼可以通過malloc()進行分配,然後通過realloc()調整大小。例如void *buf = malloc(size);

  • 當數組需要被多個函數使用時,則將其聲明爲靜態char[]或通過malloc()進行分配。