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

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

回答

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

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

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


以上是当我初始化一个字符数组而不在C中设置数组大小时会发生什么的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>