一、strcat介绍
strcat
是一个在 C 语言中常用的库函数,它用于连接(拼接)两个字符串。这个函数定义在头文件中。
函数原型
char *strcat(char *dest, const char *src);
功能描述
strcat
函数将src
字符串的内容追加到dest
字符串的末尾,并在追加的内容前添加一个空字符('\0')来分隔原来的dest
字符串和新的src
字符串。注意,dest
必须有足够的空间来存储追加后的整个字符串,否则可能会导致缓冲区溢出,这是一个常见的安全问题。
函数参数
dest
:指向目标字符串的指针,即你希望在其中添加src
字符串的字符串。src
:指向源字符串的指针,即你希望添加到dest
字符串的字符串。
函数返回值
strcat
函数返回一个指向dest
字符串的指针。
二、strcat模拟实现
思路
函数参数和返回值参考库函数,进入函数内部,先对两个指针assert断言,判断是否为空指针
然后使用一个while循环,让指向目标字符串dest的指针移动到'\0'的位置
接下来再用一个while循环,每次循环完成将源字符串src中的一个字节赋值给目标字符串dest字符串的一个字节,然后两个指针分别+1,直到源字符串中出现'\0',拷贝'\0',结束循环
assert断言的使用详解 参考另一篇文章
注意:while循环的表达式经过优化后可以用一条代码执行需要的所有逻辑
*dest++ = *src++
表达式先执行解引用,再赋值
赋值后检查*dest是否为'\0',判断循环是否继续 然后再执行后置++
代码
#include<stdio.h> #include<assert.h> #include<string.h> char* strcat1(char* dest,const char* src) { assert(dest && src); //判断两个指针是否为空指针 char* temp = dest; //保存目标字符串的起始地址 while (*dest) dest++; while (*dest++ = *src++) ; return temp; } int main() { char arr1[20] = { "abcd" }; char arr2[] = { "efg" }; printf("%s\n", strcat(arr1, arr2)); //使用库函数 printf("%s\n", strcat1(arr1, arr2)); //使用自定义函数 return 0; }
测试