当我初始化一个char数组而没有在c中设置数组大小时,会发生什么?



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

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

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

如果你想创建一个包含c风格字符串而不指定大小的数组,你可以做char str[] = {'a', 'b', 'c', ''};,或者更简单的char str[] = "abc";

最新更新