C++解释代码:下面的代码中的while(*p1++)为什么不写成while(p1++)?
#include <iostream.h>
#include <string.h>
char *stringcat(char * p1,char *p2)
{
char *p=p1; //将目标串首地址赋给指针变量p。
while(*p1++); //指针p1移到s1的串尾
p1--;
while (*p1++=*p2++); // 将源串s2中的字符依次复制到目标串s1中。
return p; //返回指向目标串首地址的指针p。
}
int main(void)
{
char s1[200],s2[100];
cout<<"输入第一个字符串:";
cin.getline( s1,100);
cout<<"输入第二个字符串:";
cin.getline( s2,100);
cout<<"拼接后的字符串: ";
cout<<stringcat(s1,s2)<<endl; //将字符串s2拼接到字符串s1后输出s1的内容。
}
c++
[解决办法]
加*表示指向的内容,表示循环到‘\0’结束符
不加*表示指针变量的地址值
[解决办法]
while( p1++ ) , 这不是要一直等到p1= NULL 的情况才会停止循环。
与 while( *p1++ ) 产生的效果,怎么可能相等
[解决办法]
这样的做法, 一定要保证,p1字符串有足够的空间,足以容纳p2, 否则你懂的。
在溢出边界进行赋值,是对野指针的操作,是不合法的。