C语言 通过char指针的不正确输出



看下面的程序

int main()
{
 char p[3]="bug";
 puts(p);
 char *a=p;
 puts(a);
 return 0;
}

对于第一个放,我得到正确的输出(即)"错误"
但是对于第二次投放,我得到的输出是"bug↓("

  1. 为什么第二个输出垃圾值附加在末尾?
  2. char *a指向与char p[3]相同的内存位置。为什么不能检测到结尾''?

要存储"bug" + 0终止符,您需要4个字符,您只分配了3个字符。试一试:

char p[] = "bug";

我怀疑第一个puts可以工作,因为编译器做了一些有趣的事情,可以检测大小

nmichaels有一个更好的解释:第一个有效,因为char *a在堆栈上正好在char p[3]之后。空终止符成为a的初始值,只要a保持未初始化,p以零结束

char[4] !!不要忘记末尾的 !

最新更新