当我尝试以大小为5的字符串b
执行此代码时,它会打印出
芒果
尽管未打印字符串a
,但输出仍然是
芒果
但是如果我将字符串b
的大小增加到6,它只会打印
芒果
int i=0;
char a[5]="apple";
char b[5]="mango";
pf("\n%s",b);
答案 0 :(得分:0)
如上面的注释所述,为\0
终止符增加一个数组,或者仅打印必要的大小:
pf("\n%.*s", sizeof(b), b);
答案 1 :(得分:0)
您缓冲区溢出。
"mango"
的大小为6个字符,当您声明b[5]
时,没有空终止符的空间。
当没有空终止符时,printf
和%s
将尝试打印出堆栈中剩余的任何内容,在这种情况下碰巧是"mangoapple"
。
这是未定义的行为,因为您实际上并不知道堆栈中有什么。
最佳实践,分配字符串时不要忘记空终止符的空间。