C语言编程字符指针变量的一个小问题

#include<stdio.h>
main()
{
char *p1={"ha"},b[5]={"haha"},*p2;
p2=b;
for(;*p1!='\0';p1++,p2++)
*p2=*p1;
*p2='\0';
printf("%s",b);

}
请问这个程序中为什么不能printf("%s",p2);这样输出?

因为你的p2已经发生的改变,注意是p2这个指针变量的指向发生的改变

for(;*p1!='\0';p1++,p2++)
*p2=*p1;
你看你这个循环
p2++;
每运行一次,他的指向就向后移动一位,
最后p2指向的是b[4]
而你想输出的明显是b这个数组,
printf("%s",p2);
已经达不到这个目的了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-14
在for循环里进行了多次 p2++, p2最后指向的地址内容是'\0',printf输出为空

第2个回答  2013-12-14
因为当前 p2指向数据已经是 ‘\0’ 了,需要重新将 p2 指向字符串开头才能有正确的输出。
相似回答