while的有关问题 高手来

while的问题 高手来
本帖最后由 yjhyy418 于 2013-04-23 17:38:28 编辑
char str1[20] = {"Hello "}, str2[20] = {"world "};
char *p1 = str1, *p2 = str2;
while (*p1++)
{
}
while (*p2)
{
*p1++ = *p2++;
}
*p1 = '\0';
p1 = str1;
while (*p1)
{
cout << *p1++;
}
 为什么输出的是hello 啊?不是hello world 啊?
char str1[20] = {"Hello "}, str2[20] = {"world "};
char *p1 = str1, *p2 = str2;
while (*p1)
{
p1++;
}
while (*p2)
{
*p1++ = *p2++;
}
*p1 = '\0';
p1 = str1;
while (*p1)
{
cout << *p1++;
}
这个就可以
while(*p)
{
   p++;
}

和while(*p++)
这两个有区别么?还是其他的什么原因啊?

------解决方案--------------------
就是这个原因,因为这个*p++在*p=0时退出了循环,后又进行了++,所以跳过了结束符,这样的话后边的字符就无效了,打断点看一下str1的各个元素值就明白了,'world '接在了结束符的后边了
------解决方案--------------------
是的 是这样的、、你第一种方法多执行一次++ 所有你在连接的时候的字符串是

最开始 str1 = 'h' 'e' 'l' 'l' 'o' '\0'; 

第一种:你加了之后吧内容加在 '\0'后面的 所有打印的时候只有前一半
第二种:你p正是'\0' 你会覆盖掉咯 就会只有str2 后面的那个\0 到那里才结束