本文记录一下实现strcat函数的过程

0x01 strcat函数

原型:

char *strcat(char *dest, const char *src);

参数

dest 为目标字符串指针,src 为源字符串指针。

说明

strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL

注意: dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串

返回值

返回dest 字符串起始地址。

0x02 实现原理

char dest[20] = {'a','v','8','d','\0','7','w','s'};
char src[5] = {'a','v','8','d','\0'};

假设要将src拼接到dest后面,首先要找到第一个dest中的\0,然后在后面赋值。

在网上找到了一个非常好的案例:

char * strconcat(char *a,char *b){
    char *p=a;
    if(a==NULL || b==NULL)
        return NULL;
    while(*p)
        p++;
    while(*p++=*b++);
    return a;
}

首先创建一个指针变量,指向目标字符串的首地址,然后不断偏移……

while还真好用(真香)

等到while偏移到第一个\0的时候,将要拼接的字符串也逐个开始偏移、赋值。

总之写的很精辟!