gpt4 book ai didi

c++ - char数组如何存储在C++中?

转载 作者:行者123 更新时间:2023-12-03 07:06:54 27 4
gpt4 key购买 nike

int main()
{
char c1[5]="abcde";
char c2[5]={'a','b','c','d','e'};

char *s1 = c1;
char *s2 = c2;

printf("%s",s1);
printf("%s",s2);

return 0;
}
在此代码片段中,char 数组 C2 没有返回任何错误,但 char 数组 C1 返回的字符串太长。我知道 C1 必须要求大小为 6 才能存储 5 个字符,因为它存储 \0 (NULL char) 在最后一个索引中。但我很困惑 为什么C2工作得很好呢?
此外,当使用 %s 打印 C2 时,输出为 abcde@在哪里 @是一个胡言乱语的角色。 %sprintf打印从给定地址到 \0 的所有字符遇到。我不明白 为什么在末尾打印那个多余的字符 ?

最佳答案

您已经创建了两个未终止的字符串。使您的数组足够大以容纳空终止符,您将避免这种未定义的行为:

char c1[6] = "abcde";
char c2[6] = {'a','b','c','d','e','\0'};
严格来说,后者实际上并不需要 '\0' .此声明是等效的,并且将包括空终止符:
char c2[6] = {'a','b','c','d','e'};
我个人更喜欢第一种形式,但可以省略显式长度,这样更方便:
char c1[] = "abcde";

关于c++ - char数组如何存储在C++中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64196726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com