当我初始化一个字符数组而不在 C 中设置数组大小时会发生什么

na_*_*yan 2 c arrays char

当我初始化一个像char str1[] = {'a','b','c'}(未设置数组大小)的字符数组并使用循环直到找到它的长度时str1[i] != '\0',我得到length = 4. 相反,当我像初始化一样char str2[10] = {'a','b','c'}(设置数组大小)并使用相同的方式找到长度时,我得到length = 3. 为什么str1[3]包含垃圾值而不是 in str2[3]

Kev*_*vin 6

char str1[] = {'a', 'b', 'c'};创建的3个字符的数组,其中的值'a''b''c'。数组的大小是 3,你可以看到它sizeof str1(这将返回字节数,但由于 achar被定义为 1 个字节,它与元素数相同)。尝试计算此数组中包含的字符串的长度会导致未定义行为,因为str1包含 C 样式字符串,因为它没有'\0'终止符。您的循环计算超出了数组的范围。

char str2[10] = {'a', 'b', 'c'};创建的10个字符的数组,其中的值'a''b''c',和7'\0'秒。数组的大小是 10。计算字符串的长度str2会得到 3,因为str2[3]'\0';

如果要创建一个包含 C 样式字符串的数组而不指定大小,可以执行char str[] = {'a', 'b', 'c', '\0'};,或者更简单地说,char str[] = "abc";.