2013-04-25 143 views
-4

我有問題,編譯以下行:爲什麼這個簡單的代碼不能編譯?

/*This code compiles with error*/ 
char HeLev1[6]; 
HeLev1[]="45.0"; 
/*but this is OK:*/ 
char HeLev1[6]="45.0"; 
+1

你的編譯器給出了什麼錯誤信息? – 2013-04-25 20:31:31

+6

數組不可分配。除此之外,'HeLev1 []'不是一個表達式。 – 2013-04-25 20:31:58

+0

賦值語句不能出現在函數體外。 – 2013-04-25 20:32:29

回答

5

不能賦值的數組。您需要將值分配給數組元素一個接一個(或者,用繩子打交道時,使用strcpy()

char HeLev1[6]; 
strcpy(HeLev1, "45.0"); 

char HeLev2[6]; 
HeLev2[0] = '4'; 
HeLev2[1] = '5'; 
HeLev2[2] = '.'; 
HeLev2[3] = '0'; 
HeLev2[4] = '\0'; /* properly "terminate" the string */ 

注意,在你的代碼,確定部分,你有一個數組初始化,不分配。

另請注意,在上述兩種情況下,第六個元素(HeLev1[5]HeLev2[5])具有未定義的值(垃圾)。

+0

你的第一個例子不錯過nul char? OR是隱含的嗎?我不記得 – 2013-04-25 20:39:13

+0

你總是可以使用'memcpy()'數組,不是嗎? – millimoose 2013-04-25 20:40:08

+1

@ 0A0D:nul char是隱含的。你只需要確保數組中有足夠的空間用於所有字符**和** nul字符。 – pmg 2013-04-25 20:40:29

-1

只有初始化時纔可以將整個值賦給數組。像這些是正確的形式,

char HeLev1[6]="45.0"; 
int array[3]={1,2,3}; 
char HeLev1[]="45.0"; 
int array[]={1,2,3}; 

但是,一旦你跳過這部分。你必須按元素分配元素。像,

char HeLev2[6]; 
    HeLev2[0] = '4'; 
    HeLev2[1] = '5'; 
    HeLev2[2] = '.'; 
    HeLev2[3] = '0'; 
    HeLev2[4] = '\0'; /* properly "terminate" the string */ 

或者你可以使用memcpy或strcpy。