是 char s[] = {"ABC"}; 合法的?

1 c arrays declaration string-literals list-initialization

#include <stdio.h>
int main(){
    char s[] = {"hello"};
    printf("%s", s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以编译并成功执行,但是如何将一维数组(char[] s)赋值为二维数组({"hello"})呢?

MHE*_*adi 5

仅当列表中只有一个字符串时它才有效。例如,以下代码无法编译:

char a[] = {"Hello", "World"};
printf("%s", a);
Run Code Online (Sandbox Code Playgroud)

a当列表是一维的(您的情况)并且列表中只有一个字符串时,编译器会忽略该列表。它几乎是这样的:

char a[] = {'H', 'e', 'l', 'l', 'o', '\0'};
Run Code Online (Sandbox Code Playgroud)

事实上,它不一定是字符串。这些也是有效的:

int a = {7}; // a = 7
double b = {3.4}; // b = 3.4
Run Code Online (Sandbox Code Playgroud)

如果你想使其成为二维(字符串的一维和列表本身的一维):

char *a[] = {"Hello"};
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道字符串大小是固定的:

char a[][6] = {"Hello"};
Run Code Online (Sandbox Code Playgroud)