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

标签 c output

<分区>

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

#include <stdio.h>

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

它返回一个奇怪的输出:

ABC¬ a

使用来自 this question 的最佳答案,我发现当我将 x[3] 更改为 x[4] 时一切正常。

但是为什么?为什么我在 x[3] 上得到奇怪的输出,为什么 x[4] 没问题?

最佳答案

终止 \0 没有空间。事实上,我预计在这种情况下编译会失败。

尝试

char x[4] = "ABC";

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

char x[] = "ABC";

关于c - 为什么对于长度为 k 的字符串需要 char[k + 1] 而不是 char[k] ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519705/

相关文章:

java - 尝试提取用户输入并返回文件扩展名

c - 输入多次写入输出文件 (C)

c - 当你声明一个指针时,它是 NULL 吗?

c - 有没有办法在 C 中进行柯里化(Currying)?

c - 图片 : Elements of array have incomplete type

c - 取消引用指向不完整类型的指针 - typedef struct

java - 去除重复输出

java - 在浏览器中显示 Sh 脚本输出

ruby - Chef Recipe : can't capture output from backticks to variable in ruby_block

c - scanf ("%c", &c) 和 scanf ("%c", &c) 的区别