打印第二个字符串会导致第一个字符串在C中重复

时间:2019-12-03 18:13:40

标签: c

当我尝试以大小为5的字符串b执行此代码时,它会打印出

  

芒果

尽管未打印字符串a,但输出仍然是

  

芒果

但是如果我将字符串b的大小增加到6,它只会打印

  

芒果

int i=0;
char a[5]="apple";
char b[5]="mango";
pf("\n%s",b);

enter image description here

2 个答案:

答案 0 :(得分:0)

如上面的注释所述,为\0终止符增加一个数组,或者仅打印必要的大小:

pf("\n%.*s", sizeof(b), b);

答案 1 :(得分:0)

缓冲区溢出

"mango"的大小为6个字符,当您声明b[5]时,没有空终止符的空间。

当没有空终止符时,printf%s将尝试打印出堆栈中剩余的任何内容,在这种情况下碰巧是"mangoapple"

这是未定义的行为,因为您实际上并不知道堆栈中有什么。

最佳实践,分配字符串时不要忘记空终止符的空间。