2013-04-25 104 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。