【发布时间】:2021-01-24 01:36:15
【问题描述】:
当我初始化像char str1[] = {'a','b','c'} 这样的字符数组(未设置数组大小)并使用循环找到它的长度直到str1[i] != '\0' 时,我得到length = 4。相反,当我像char str2[10] = {'a','b','c'}(设置数组大小)一样初始化并使用相同的方式查找长度时,我得到length = 3。为什么str1[3] 包含垃圾值但str2[3] 中没有?
【问题讨论】:
-
char str1[] = {'a','b','c'},分配一个大小为 3 的字符数组。char str2[10]分配一个大小为 10 的数组,并使用所需的值设置索引 0,1,2。其余部分仍被分配并可供使用,但包含垃圾值。 -
str1中没有元素是'\0',所以你的循环超出了界限,这是未定义的行为 -
您可能访问了第一个数组越界导致未定义的行为。第一个数组大小为 3,而第二个数组大小为 10。