为什么我得到:"错误:赋值给表达式的数组类型"

时间:2017-01-27 08:21:42

标签: c arrays pointers initialization variable-assignment

#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;
}

两者看起来都和我一模一样。我在这里缺少什么?

2 个答案:

答案 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'}