2012-08-28 80 views
9

的值是什麼區別:分配字符數組用C

char fast_car[15]="Bugatti"; 

char fast_car[15]; 
fast_car="Bugatti"; 

因爲第二個結果與編譯錯誤:

error: incompatible types when assigning to type ‘char[15]’ from type ‘char *’

雖然第一一個正常工作。將數組中的字符串放在與數組初始化不同的位置會很有幫助。

+1

你可以使用像snprintf或strncpy這樣的字符串函數來填充一個新值 –

+3

除非你真的確定這是你想要的,否則不要使用'strncpy'。確保緩衝區足夠大,並使用'strcpy'代替。 – harald

+0

@harald爲什麼使用strncpy是一個壞主意?它通常可以防止溢出。 – hardpenguin

回答

10

第一個是初始化而第二個是分配。由於C中的數組不是可修改的值,因此您無法爲其分配新的值。

介意你,你可以修改數組內容,你就是不能說fast_car = ...。所以內容是可以修改的,陣列本身不是


使用相同的符號=這些廣泛不同的概念是有爭議的值。

+2

'str_replace(「modifiable」,「mutable」);';) –

+2

@Nick:字符串替換在C中實際上並不那麼簡單;) –

+0

@cnicutar,你能否提出另一種解決方案?這是關於從結構中手動分配少量數組變量的。使用指向char的指針工作,但這不是一個管理內存的不好解決方案嗎? – hardpenguin

3
char fast_car[15]="Bugatti"; 

它說fast_car是一個數組,並用字符串「Buratti」初始化。正確的用法:

char fast_car[15]; 
fast_car="Bugatti"; 

第一行是char數組聲明(未初始化)。其次,這裏的fast_car只是這個char數組中第一個元素的地址(指針)。將指針fast_car指派給char「Buratti」數組對於差異類型的值是不正確的。