我正在努力寻找原因,因为我正在阅读的书告诉我初始化数组的大小,但是这可以编译。
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(大小=?)会发生什么呢?
答案 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]
。