C++ strcat

百度了一下网络上的代码,发现大多数是有问题的,自己琢磨着写了一个加深一下理解。
字符串拼接:

char* strcat(char* s,char* t)
{
    assert((s != NULL) && (t != NULL));//对输入源进行检测
    char* stradd = (char*)malloc(sizeof(char)*(strlen(s)+strlen(t)+1));
    assert(stradd != NULL);
    char *temp = stradd;
    while(*temp++ = *s++)
    {   
    }
    *temp--;
    while(*temp++ = *t++)
    {     
    }
    return stradd;
}

调用:

int main()
{
    cout <<"strcat" << strcat("12345","6789")<

输出:
这里写图片描述

看一下while(*temp++ = *s++){}执行顺序:
1 将*s值赋值给*temp;
2 判断*temp值是否为空(‘\0’),如果是,执行第3步,然后跳出循环
3 temp和s指向下一个地址,转第1步

while(*temp++ = *s++)
    {   
    }
    //此时temp指向'\0'的下一位,需要把指针回退一位,让temp指向'\0'
    *temp--;

你可能感兴趣的:(C++)