Ani*_*aul 0 c arrays string printf char
样本1:
char a []={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);
Run Code Online (Sandbox Code Playgroud)
输出: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);
Run Code Online (Sandbox Code Playgroud)
输出:HII♥喜♥♦
样本3:
char a [5]={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);
Run Code Online (Sandbox Code Playgroud)
输出:hihi
为什么这三个程序的输出不同?
样品1和样品2几乎是类似的代码,除了额外的线char l = a[i],样品3与样品1和2的不同,基于阵列大小的声明.
在C中,数组只有一个大小,但没有终止符.因此,两个字符的数组(如前两个示例)将包含您指定的两个字符,而不是其他任何字符.当你循环寻找"终结者"时,你将走出界限并有未定义的行为.
第三种情况不同,因为您定义了一个包含五个元素的数组,但只初始化前两个元素.然后,C标准要求将数组的其余部分初始化为零,这与字符相同'\0'.第三个例子中的数组仍然没有明确的终结符,只是发生了剩余部分被初始化为与字符串终止符相同的值.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |