这个自定义拼接函数,能不能解读一下😧

char *ss,*p1,*p2;

ss=new char[getlength()+strlen(s)+1];

p1=ss;

p2=str;

while(*p1=*p2)p1++,p2++;

while(*p1++=*s++);

delete []str;

str=ss;

写了一下注释:

//定义三个字符型指针
char *ss,*p1,*p2;  
//new一个getlength()+strlen(s)+1长度的字符数组 并让ss指向它
ss=new char[getlength()+strlen(s)+1]; 
//p1 再指向---> ss
p1=ss;
//p2 指向---> str
p2=str;
//当p1与p2值相等时,p1,p2后移 注意 这里是赋值语句 p2赋值给p1
while(*p1=*p2) p1++,p2++; 
//当* p1与* s相等时,p1++,s++后移 注意 这里是赋值语句 s赋值给p1
while(*p1++=*s++);
//释放掉临时申请的str数组空间
delete []str;
//再将ss赋值给str str中存的就是拼接后的内容了。
str=ss;

希望对题主有所帮助,望采纳!!


ss = new char[getlength() + strlen(s) + 1];   //为ss申请空间,空间长度是要拼接的字符串的和加一(为结束符预留空间)
p1 = ss;   //p1指针指向ss的首地址
p2 = str;  //p2指针指向str的首地址
while (*p1 = *p2)p1++, p2++;  //循环向后移动指针并且将p2指向的内容赋值给p1
while (*p1++ = *s++);    //循环将s的内容赋值到p1后续的空间,此循环结束后ss中的数据就会变成str和s的拼接字符串
delete[]str;    //清空str
str = ss;        //将str换成ss,输出

char* ss, * p1, * p2;
    //申请一个长度为getlength() + strlen(s) + 1的数组,赋值给ss,用来存储str和s拼接后的结果
    ss = new char[getlength() + strlen(s) + 1];
    p1 = ss;//用p1指向ss起始位置,即ss[0]
    p2 = str;//用p2指向str的起始位置,即str[0]
    //复制str的内容到ss中,遇到*p1 = 0结束循环,即遇到str的结束符结束循环
    while (*p1 = *p2)p1++, p2++;
    //从上面的循环中出来,p1已经指到了str的结束符位置
    //从p1位置开始复制s的内容到ss中
    while (*p1++ = *s++);
    delete[]str;//释放str数据
    str = ss;//将拼接够的数组赋值给str