如何解决当我初始化一个字符数组而不在 C 中设置数组大小时会发生什么
当我初始化像 char str1[] = {'a','b','c'}
这样的字符数组(未设置数组大小)并使用循环找到它的长度直到 str1[i] != '\0'
时,我得到 length = 4
。相反,当我像 char str2[10] = {'a','c'}
一样初始化(设置数组大小)并使用相同的方式找到长度时,我得到 length = 3
。为什么 str1[3]
包含垃圾值但在 str2[3]
中没有?
解决方法
char str1[] = {'a','b','c'};
创建一个包含 3 个字符的数组,其值为 'a'
、'b'
和 'c'
。数组的大小为 3,您可以使用 sizeof str1
看到(这会返回字节数,但由于 char
被定义为 1 个字节,因此它与元素数相同)。尝试计算此数组中包含的字符串的长度会导致未定义行为,因为 str1
确实不包含 C 样式字符串,因为它没有 {{ 1}} 终止符。您的循环计算超出了数组的范围。
'\0'
创建一个包含 10 个字符的数组,其值为 char str2[10] = {'a','c'};
、'a'
、'b'
和 7 个 'c'
。数组的大小是 10。计算 '\0'
中字符串的长度会得到 3,因为 str2
是 str2[3]
;
如果你想创建一个包含 C 风格字符串的数组而不指定大小,你可以执行 '\0'
,或者更简单的,char str[] = {'a','c','\0'};
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。