【问题标题】:Should statically-declared character arrays with a specified size be initialized with a literal in C?是否应该用 C 中的文字初始化具有指定大小的静态声明的字符数组?
【发布时间】:2011-01-27 23:56:54
【问题描述】:

例如,

gcc 编译这个没问题...

char s[7] = "abc";

但它给出了错误“分配中不兼容的类型”...

char s[7];
s = "abc";

有什么区别?

【问题讨论】:

    标签: c arrays string char


    【解决方案1】:

    第一个是初始化;它的意思是“在堆栈上声明一个包含 7 个char 的数组,并用'a''b''c' 填充前3 个元素,其余元素用'\0' 填充”。

    在第二个中,您没有将数组初始化为任何内容。然后,您尝试分配给该数组,该数组永远无效。像这样的东西会“起作用”:

    const char *s;
    s = "abc";
    

    但含义会略有不同(s 现在是指针,而不是数组)。在大多数情况下,差异很小。但是有几个重要的警告,例如您不能修改内容。此外,sizeof(s) 会给你一个指针的大小,而在你的原始代码中,它会给你 7(数组的大小)。

    推荐阅读是这样的:http://c-faq.com/charstring/index.html

    【讨论】:

    • 还要注意,在第一种情况下,其余三个条目也初始化为'\0';这可能非常有用。
    • 我不会将差异称为“最小”。低估指针和数组之间的区别是 C 新手最常见和最危险的错误之一。
    • @R..:是和不是。我同意这是理解的基本点。但是我很少会真正写出重要的代码。
    猜你喜欢
    • 2021-10-29
    • 2011-06-26
    • 2010-11-25
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多