为什么对于长度为k的字符串,我需要char [k + 1]而不是char [k]?

Mar*_* II 0 c output

所以我有一套简单的代码:

#include <stdio.h>

int main()
{
  char x[3] = "ABC"; // (*)
  puts(x);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它返回一个奇怪的输出:

ABC¬ a

使用从上面的回答这个问题,我发现,当我改变x[3]x[4]一切都正常运行.

但为什么?为什么我会得到一个奇怪的输出x[3],为什么x[4]还好?

Ale*_*exD 7

终止没有空间\0.事实上,我希望在这种情况下编译失败.

尝试

char x[4] = "ABC";
Run Code Online (Sandbox Code Playgroud)

或者,正如@Zeta建议的那样

char x[] = "ABC";
Run Code Online (Sandbox Code Playgroud)

  • 或者,甚至更好,`char x [] ="ABC";`.让编译器为您计算字符数. (3认同)