是否必须为字符数组的初始化提供''?

请看代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[10] = {'L','e','s','s','o','n','s'}; // did not add ``
    char c;

    for (int i = 0; name[i] != ''; i++)
    {
        c = name[i];
        printf("%c", c);
    }

    return 0;
}

我最后没有给,但仍然有效。

我的问题:在上面的情况下是自动添加的吗?

编辑:在这些情况下会发生什么:

  1. char name[7] = {'L','e','s','s','o','n','s'};
  2. char name[8] = {'L','e','s','s','o','n','s'};

我很抱歉编辑问题。

回答

在 C 中,任何类型的部分初始化数组都是 0 初始化的。所以,

int foo[5] = {1, 2, 3};

将初始化foo{1, 2, 3, 0, 0}。因此,当您不添加''到末尾时,不仅末尾会是''(假设数组足够大以适合它),而且数组的所有剩余元素都会是''.

如果您的数组不足以容纳空终止符,则不会添加它,该值甚至也不重要。读取数组末尾是未定义的行为,这可能导致段错误、垃圾数据或更糟。


以上是是否必须为字符数组的初始化提供''?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>