#include <stdio.h>
int main(void) {
int arr[10];
arr = "Hello";
printf("%s",arr);
return 0;
}
上面的代码显示了编译器错误:
t.c: In function ‘main’:
t.c:5:9: error: assignment to expression with array type
arr = "Hello";
^
t.c:6:12: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%s",arr);
^
以下代码工作正常。
#include <stdio.h>
int main(void) {
char arr[10] = "Hello";
printf("%s",arr);
return 0;
}
两者看起来都和我一模一样。我在这里缺少什么?
答案 0 :(得分:4)
他们不相同。
首先,用字符串文字初始化int
数组是没有意义的,在最坏的情况下,它可能会调用undefined behavior,作为整数转换的指针和转换的有效性此后的结果是高度特定于平台的行为。在这方面,两个片段都是无效的。
然后,考虑使用char
数组,更正数据类型,
在第一种情况下,
arr = "Hello";
是 assignment ,不允许使用数组类型作为LHS的赋值。
OTOH,
char arr[10] = "Hello";
是 initialization 声明,这是完全有效的声明。
答案 1 :(得分:0)
不知道你的第二个代码是如何工作的(它在我的情况下不起作用请告诉我可能是什么原因)它说:array of inappropriate type (int) initialized with string constant
由于您无法将整个string
分配给integer
变量。
但您可以将单个character
分配给int
变量,例如:
int a[5]={'a','b','c','d','d'}