【问题标题】:What happens after the end of character array in c? [duplicate]c中字符数组结束后会发生什么? [复制]
【发布时间】:2015-07-11 04:52:35
【问题描述】:

字符数组结束后存储的是什么?我假设会有一些随机垃圾,但它在循环 10 次后没有打印任何内容。

char a[] = "Pencil";
int i;

for (i = 0; i < 10; i++)
{
    printf("%c", a[i]);
}

所以字符数组 a 的大小为 7。并且 for 循环循环到第 10 个位置,其中还有 3 个值循环通过。但它没有打印任何内容或错误。这是怎么回事?

【问题讨论】:

  • 未定义的行为正是如此,未定义。任何事情都可能发生,包括看似理智的行为。
  • 如果您通过十六进制转储程序运行输出,您可能会发现在终端 null 之后打印了三个字符,但这并不能保证,它们的值也不能保证。它们可能是空字节;它们可能是控制字符。
  • 字符串末尾之外的三个字符可能无法打印。
  • 接受人生的一大奥秘。 ;)

标签: c arrays character


【解决方案1】:

在 C 中超出数组末尾的访问是未定义的行为。你的程序可以继续运行,或者它可能会严重崩溃,这取决于存储在数组末尾之后的内容。编译器不保证那里存储的内容 - 它可能是无用的内存,也可能对您的程序至关重要。

【讨论】:

    【解决方案2】:

    访问超出数组长度的数组元素会调用未定义的行为,这意味着任何事情都可能发生。

    【讨论】:

      猜你喜欢
      • 2011-08-25
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多