【发布时间】:2017-03-16 18:10:02
【问题描述】:
样本 1:
char a []={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);
输出: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);
输出:hii♥hi♥♦
示例 3:
char a [5]={'h','i'};
int i;
for(i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
printf("%s",a);
输出:嗨
为什么这三个程序的输出不一样?
示例 1 和示例 2 几乎是相似的代码,只是多了一行 char l = a[i],并且示例 3 根据数组大小的声明不同于示例 1 和示例 2。
【问题讨论】:
-
将无效参数传递给
printf(非终止字符串而不是终止)会导致未定义的行为
标签: c arrays string char printf