通过char指针输出不正确

时间:2011-12-30 20:28:58

标签: c arrays string pointers

查看以下程序

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

对于第1次投注,我得到正确的输出(即)“bug”
但是对于第二次看跌,我输出为“bug↓”(

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

2 个答案:

答案 0 :(得分:5)

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

char p[] = "bug";

我怀疑第一个puts是有效的,因为编译器做了一些有趣的事情并且可以检测到它的大小。

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

答案 1 :(得分:0)

char [4] !!!不要忘记最后的\ 0!