int*_*075 0 c arrays string pointers
看下面的程序
int main()
{
char p[3]="bug";
puts(p);
char *a=p;
puts(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于第一次投注,我得到正确的输出(即)"bug"
但是对于第二次投注,我输出为"bug↓"
要存储"bug"+ 0终止符,你需要4个字符,你只分配3.尝试:
char p[] = "bug";
Run Code Online (Sandbox Code Playgroud)
我怀疑第一个puts有效,因为编译器做了一些有趣的事情,可以检测大小.
nmichaels有一个更好的解释:第一个有效,因为char *a在堆栈上的char [3]之后.空终止符成为a的初始值,只要保持未初始化,p结束为零.