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

标签 arrays c char

当我初始化像 char str1[] = {'a','b','c'} 这样的 char 数组(数组大小未设置)并使用循环找到它的长度时 str1[i] != '\0',我得到 length = 4。相反,当我像 char str2[10] = {'a','b','c'} (设置数组大小)一样初始化并使用相同的方式查找长度时,我得到长度 = 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";

关于arrays - 当我初始化一个 char 数组而不在 C 中设置数组大小时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65866366/

相关文章:

javascript - 无法仅过滤数组的唯一值

c - 指定行运行次数的边界函数 (Big-O) 是多少? (C)

c - 使用 fopen(); 时,stdin 是否不兼容输入流?

mysql - 如果同一张表中有 VARCHAR,使用 CHAR 有什么意义吗?

C、获取unsigned char以使用ascii 2表

c - `a` 和 `*a` 之间有什么区别,其中 `a` 表示二维数组?

arrays - 我可以将数组中的第一个字符过滤为 String,将第二个字符过滤为 Int 吗?

c - 最后如何完善C语言的hangman循环问题?

比较 c 输入与 $$ 和 `tty` &

c++ - 计算快速排序 C++ 中的比较和移动次数