微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我初始化一个字符数组而不在 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,因为 str2str2[3];

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。