我不得不從一個裝置,該裝置是4個字節長,這樣我已經聲明陣列等最佳實踐聲明字符陣列用C
char data[4] = {0};
我將解析這個按指數和保證停止在讀取數據索引3
數據[0] ..數據[3]
在這種情況下,沒有餘地NUL( '\ 0')。
我想知道這被認爲是安全的,或者我應該聲明數組作爲
char data[5] = {0};
此數組不會STR *系列的功能一起使用。
我不得不從一個裝置,該裝置是4個字節長,這樣我已經聲明陣列等最佳實踐聲明字符陣列用C
char data[4] = {0};
我將解析這個按指數和保證停止在讀取數據索引3
數據[0] ..數據[3]
在這種情況下,沒有餘地NUL( '\ 0')。
我想知道這被認爲是安全的,或者我應該聲明數組作爲
char data[5] = {0};
此數組不會STR *系列的功能一起使用。
如果要讀取的數據是4
字節的字符串,或者如果它比4
字節,而且您正在使用char
作爲一個字符數組,而不是字符串,則沒有必要擔心。否則,你必須關心'\0'
。
使用char data[4];
爲4個字節的數據應該是安全的,如果你不會使用與像strcmp()
,strlen()
或數據%s
符的printf()
字符串處理函數。
一些規則,我使用:
要存儲串,應爲\0
焦炭分配1個字節以上。例如char arr[len+1];
要存儲除字符串以外的固定大小數據,請儘可能多地分配。例如char data[len];
如果它很大,並且大小動態變化,那麼可以通過malloc()
進行分配,然後通過realloc()
調整大小。例如void *buf = malloc(size);
當數組需要被多個函數使用時,則將其聲明爲靜態char[]
或通過malloc()
進行分配。
這取決於你要用'data'做什麼。某些函數需要最後的''\ 0':'strlen','strchr','strcpy' ...有些不會:'memcpy',... – purplepsycho
真的那一個額外的字節會成爲什麼?恕我直言,是安全的,是白癡的證明,去與5 –
'char data [5];'然後'memset(數據,0,sizeof數據);'。 – i486