看下面的程序
int main()
{
char p[3]="bug";
puts(p);
char *a=p;
puts(a);
return 0;
}
对于第一个放,我得到正确的输出(即)"错误"
但是对于第二次投放,我得到的输出是"bug↓("
- 为什么第二个输出垃圾值附加在末尾?
- char *a指向与char p[3]相同的内存位置。为什么不能检测到结尾' '?
要存储"bug"
+ 0终止符,您需要4个字符,您只分配了3个字符。试一试:
char p[] = "bug";
我怀疑第一个puts
可以工作,因为编译器做了一些有趣的事情,可以检测大小
nmichaels有一个更好的解释:第一个有效,因为char *a
在堆栈上正好在char p[3]之后。空终止符成为a的初始值,只要a保持未初始化,p以零结束
char[4] !!不要忘记末尾的 !