繁体   English   中英

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

[英]What happens when I initialize a char array without setting the array size in C

当我初始化char str1[] = {'a','b','c'}类的 char 数组(未设置数组大小)并使用循环找到它的长度时,直到str1[i] != '\0' ,我得到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 样式的字符串,因为它没有'\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"; .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM