我有问题,编译以下行:为什么这个简单的代码不能编译?
/*This code compiles with error*/
char HeLev1[6];
HeLev1[]="45.0";
/*but this is OK:*/
char HeLev1[6]="45.0";
我有问题,编译以下行:为什么这个简单的代码不能编译?
/*This code compiles with error*/
char HeLev1[6];
HeLev1[]="45.0";
/*but this is OK:*/
char HeLev1[6]="45.0";
不能赋值的数组。您需要将值分配给数组元素一个接一个(或者,用绳子打交道时,使用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]
)具有未定义的值(垃圾)。
你的第一个例子不错过nul char? OR是隐含的吗?我不记得 – 2013-04-25 20:39:13
你总是可以使用'memcpy()'数组,不是吗? – millimoose 2013-04-25 20:40:08
@ 0A0D:nul char是隐含的。你只需要确保数组中有足够的空间用于所有字符**和** nul字符。 – pmg 2013-04-25 20:40:29
只有初始化时才可以将整个值赋给数组。像这些是正确的形式,
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。
你的编译器给出了什么错误信息? – 2013-04-25 20:31:31
数组不可分配。除此之外,'HeLev1 []'不是一个表达式。 – 2013-04-25 20:31:58
赋值语句不能出现在函数体外。 – 2013-04-25 20:32:29