打印字符串不一致 #包括 void main() { chara[8]; a[0]=“h”; a[1]=“e”; a[2]=“l”; /*a[3]='l'; a[4]='o'*/ printf(“%s”,a); }
当我运行这个程序时,它会打印出来:hel 但是为什么当我有这样的东西打印字符串不一致 #包括 void main() { chara[8]; a[0]=“h”; a[1]=“e”; a[2]=“l”; /*a[3]='l'; a[4]='o'*/ printf(“%s”,a); },c,string,initialization,stack,printf,C,String,Initialization,Stack,Printf,当我运行这个程序时,它会打印出来:hel 但是为什么当我有这样的东西 #include <stdio.h> void main() { char a[8]; a[0] = 'h'; a[1]='e'; a[2]='l'; /*a[3]='l'; a[4]='o';*/ printf("%s", a); } #包括 void main() { chara[8]; a[0]=“h”; a[1]=“e”; a[2]=“l”; a[3]='l'; a[4
#include <stdio.h>
void main()
{
char a[8];
a[0] = 'h';
a[1]='e';
a[2]='l';
/*a[3]='l';
a[4]='o';*/
printf("%s", a);
}
#包括
void main()
{
chara[8];
a[0]=“h”;
a[1]=“e”;
a[2]=“l”;
a[3]='l';
a[4]='o';
printf(“%s”,a);
}
它打印出来:你好��
如果字符串是3个字符或更少,那么它会正确地打印出字符串,但是如果我有超过3个字符,并且末尾没有空字符(表示字符串的结尾),它会打印出一些垃圾
此外,这在C中也是如此。由于没有使用
NUL
'\0'
字符关闭字符串,因此您将面临一些意外行为。在第一个版本中,当您跳过数组中的[3]
地址时,它可能包含致命地关闭字符串的0
,但这是绝对随机和不可预测的。在C中,动态(malloc
..)和自动(堆栈)变量不是零初始化的。只有静态和线程局部变量为零。因此,如果您自己不提供终止0,则可能没有终止0,因此您的字符串不会终止,并且使用它会导致未定义的行为
无论如何,在某些情况下,使用不确定值可能会导致实现定义或未定义的行为,这可能会使程序行为不稳定。没有元素的字符数组“\0”不是字符串。如果在需要字符串的地方使用这样的数组,则会调用未定义的行为。
#include <stdio.h>
void main()
{
char a[8];
a[0] = 'h';
a[1]='e';
a[2]='l';
a[3]='l';
a[4]='o';
printf("%s", a);
}