字符数组的初始化字符串太长C

ode*_*tok 4 c arrays char

我正在研究一个接受输入的程序,并输出与输入相对应的数值.我在char部分得到了错误.我不明白为什么当数组中只有27个字符的大小为27时会出现错误?

int main ()
{
    char greek[27] = "ABGDE#ZYHIKLMNXOPQRSTUFC$W3";
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*eri 9

您需要多一个[28]尾随'\0'作为有效字符串.

看看C编程说明:第8章:字符串:

C中的字符串由字符数组表示.字符串的末尾标有一个特殊字符,即空字符,它只是值为0的字符.(空字符除了名称与空指针之外没有关系.在ASCII字符集中,空字符命名为NUL.)null或字符串终止字符由另一个字符转义序列\ 0表示.

正如Jim Balter和Jayesh所指出的,当您提供初始值时,您可以省略数组大小(编译器使用初始化器的数量作为数组大小).

char greek[] = "ABGDE#ZYHIKLMNXOPQRSTUFC$W3";
Run Code Online (Sandbox Code Playgroud)

  • 使用`char greek []`比使用`char greek [28]`要好得多. (3认同)
  • @trilolil 你自己在回答:_编译器总是需要提前知道数组的长度,以便在堆栈上保留必要的空间_,但是手动计数容易失败;例如,`char name[6] = "Ramón";` 由于`ó` 消耗了2 个字节,所以不会为尾随的NUL 留出空间,所以让编译器为你计算。 (3认同)