gpt4 book ai didi

c - C中几乎相同程序的不同输出

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:13 26 4
gpt4 key购买 nike

示例 1:

char a []={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);

Output: hi☻hi♥

示例 2:

char a []={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
char l = a[i];
printf("%c",a[i]);
}
printf("%s",a);

Output:hii♥hi♥♦

示例 3:

char a [5]={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);

Output: hihi

为什么这三个程序的输出不一样?

示例 1 和示例 2 除了多了一行 char l = a[i] 之外几乎是相似的代码,示例 3 与示例 1 和 2 的区别在于数组大小的声明.

最佳答案

在C语言中,数组只有大小,没有终止符。所以两个字符的数组(就像你的前两个例子)将有你指定的两个字符,没有别的。当您循环寻找“终结者”时,您将越界并产生未定义的行为

第三种情况不同,因为您定义了一个包含五个元素的数组,但只初始化了前两个。然后 C 标准要求将数组的其余部分初始化为零,这与字符 '\0' 相同。第三个例子中的数组仍然没有明确的终止符,只是碰巧余数被初始化为与字符串终止符相同的值。

关于c - C中几乎相同程序的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396744/

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