strcat是C语言标准库string.h中提供的字符串拼接函数,作用是将源字符串的内容追加到目标字符串的末尾,目标字符串原有的结束符会被源字符串的第一个字符覆盖,最终拼接后的字符串会以新的结束符收尾。

strcat函数的基本信息
函数原型
strcat的函数原型如下:
#include <string.h> char *strcat(char *dest, const char *src);
参数说明
- dest:目标字符串的指针,该字符串需要有足够的空间容纳拼接后的全部内容,且必须是可修改的字符数组,不能是字符串常量。
- src:源字符串的指针,该字符串是需要追加到目标字符串末尾的内容,通常是不可修改的字符串常量或者字符数组。
返回值
函数执行成功后会返回目标字符串dest的指针,方便进行链式调用。
strcat的基本使用示例
下面是一个简单的使用示例,展示如何将两个不同的字符串拼接成一个完整的字符串:
#include <stdio.h>
#include <string.h>
int main() {
// 定义目标字符数组,预留足够空间
char dest[50] = "Hello ";
const char *src = "World";
// 调用strcat拼接字符串
strcat(dest, src);
// 输出拼接后的结果
printf("拼接后的字符串: %sn", dest);
return 0;
}
上述代码的执行结果是输出拼接后的字符串: Hello World,可以看到src的内容成功追加到了dest的末尾。
使用strcat的注意事项
目标数组空间必须足够
strcat不会检查目标数组的剩余空间,如果目标数组的空间不足以容纳拼接后的内容,就会发生缓冲区溢出,导致程序崩溃或者出现安全漏洞。比如下面的错误示例:
#include <stdio.h>
#include <string.h>
int main() {
// 目标数组只有6个字节空间,只能存"Hello"加结束符
char dest[6] = "Hello";
const char *src = " World";
// 空间不足,会发生缓冲区溢出
strcat(dest, src);
printf("%sn", dest);
return 0;
}
目标字符串必须是可修改的
如果目标字符串是字符串常量,比如char *dest = "Hello";,此时dest指向的是只读内存区域,使用strcat修改会触发段错误。必须使用字符数组来作为目标字符串。
源字符串和目标字符串不能重叠
如果src和dest指向的内存区域有重叠,strcat的行为是未定义的,可能会导致数据错乱,因此不要对同一个字符串使用strcat进行拼接操作。
更安全的替代方案strncat
为了避免缓冲区溢出的问题,实际开发中更推荐使用strncat函数,它可以指定最多追加的字符数量,函数原型如下:
char *strncat(char *dest, const char *src, size_t n);
其中n表示最多从src中追加的字符数量,不会超过n个,同时会自动在拼接后的字符串末尾添加结束符。下面是使用示例:
#include <stdio.h>
#include <string.h>
int main() {
char dest[10] = "Hi ";
const char *src = "Everyone";
// 最多追加4个字符,避免溢出
strncat(dest, src, 4);
printf("拼接结果: %sn", dest);
return 0;
}
上述代码最终输出的结果是Hi Ever,只追加了src的前4个字符,有效避免了空间不足的问题。