炭字[]与炭字[5]

时间:2018-10-04 00:37:34

标签: c arrays string

我正在努力寻找原因,因为我正在阅读的书告诉我初始化数组的大小,但是这可以编译。

int main (void){

    char word_0[] = "Hola que tal\n";

    printf("%s", word_0); 

    char word_1[20] = "Hola que tal\n";

    printf("%s", word_1);

    return 0;
}

我知道我在“浪费” word_1中的内存,因为我要的空间(大小= 20)超出了我的需求,但是word_0(大小=?)会发生什么呢?

3 个答案:

答案 0 :(得分:3)

当声明一个没有指定任何大小但带有初始化程序的数组时,C选择一个大小足以容纳初始化程序指定的所有元素的大小。对于您的

    char word_0[] = "Hola que tal\n";

,即14个字符(其中一个用于字符串终止符)。

答案 1 :(得分:2)

编译器自动选择大小。

答案 2 :(得分:0)

要结合@Ben和@JohnBollinger的答案,

char_word[] = "Hola que tal\n" 语句向编译器指示将根据字符串文字或"Hola que tal\n"初始化数组的大小。

因此,在这种情况下,编译器会说char_word[]的声明等效于char_word[14]