C strcat() 语法
strcat() 是 C 语言 <string.h> 标准库的一个函数,它用于将一个字符串连接到另一个字符串的末尾。
语法:
strcat(dest, src)说明:
strcat() 函数接收以下 2 个参数。
dest(char*):目标字符串的指针。src(const char*):另一个字符串的指针。
strcat(dest, src) 会将 src(包括末尾的空字符 '\0')追加到 dest 的末尾,然后返回指向 dest 的指针。追加后,dest 的原有 '\0' 会被覆盖,src 的 '\0' 会成为新字符串的结束符。
对于 strcat() 函数,小伙伴们需要注意以下 2 点。
- dest 必须有足够的空间来容纳追加后的字符串,否则会导致缓冲区溢出。
- src 必须是以 '\0' 结尾的字符串。
提示: strcat 是 “string concatenate” 的缩写。
C strcat() 摘要
| 使用频率 | 高 |
|---|---|
| 修改字符串 | 是 |
| 官方文档 | 查看 |
C strcat() 示例
接下来,我们通过几个简单的例子来讲解一下 C strcat() 函数是如何使用的。
示例 1:strcat() 连接两个字符串
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[20] = "Go";
char str2[] = "Python";
strcat(str1, str2);
puts(str1);
puts(str2);
return 0;
}运行结果如下。
GoPython
Python分析:
从结果可以看出来,strcat(str1, str2) 会修改第 1 个字符串,但不会修改第 2 个字符串。
如果你不希望修改原字符串,可以先使用 strcpy() 函数将原字符串复制一份,然后再使用 strcat() 函数进行拼接。
示例 2:使用 strcpy() + strcat()
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[] = "Go";
char str2[] = "Python";
char result[50];
// 复制 str1 到 result
strcpy(result, str1);
// 拼接 str2 到 result 末尾
strcat(result, str2);
// 打印结果
puts(str1);
puts(str2);
puts(result);
return 0;
}运行结果如下。
Go
Python
GoPython分析:
在这个例子中,我们首先使用 strcpy(result, str1) 来将 str1 复制到 result 中,然后再使用 strcat(result, str2) 将 str2 拼接到 result 的末尾。这样操作下来,就不会修改原字符串 str1 了。
示例 3:strcat() 连接多个字符串
#include <stdio.h>
#include <string.h>
int main(void)
{
char sentence[100] = "Hi, ";
const char word2[] = "welcome ";
const char word3[] = "to ";
const char word4[] = "lvye!";
strcat(sentence, word2);
strcat(sentence, word3);
strcat(sentence, word4);
printf("%s\n", sentence);
return 0;
}运行结果如下。
Hi, welcome to lvye!分析:
在这个例子中,我们多次调用 strcat() 来将多个字符串依次连接到一个目标字符串中,从而一步步来构建一个更长的字符串。同样地,这里的目标字符串 sentence 需要被声明为足够大的尺寸才行,这样以便容纳所有连接的字符串。
示例 4:strcat() 连接字符串和字符数组
#include <stdio.h>
#include <string.h>
int main(void)
{
char greeting[30] = "Hello, ";
char name[] = "Jack"; // 字符数组
strcat(greeting, name);
printf("%s\n", greeting);
return 0;
}运行结果如下。
Hello, Jack分析:
strcat() 不仅可以连接字符串字面量或 const char* 类型的字符串,还可以连接普通的字符数组,只要它们以空字符 '\0' 结束即可。
深入了解 strcat()
我们在使用 strcat() 函数时,最重要的一点是要确保目标字符串 dest 有足够的内存空间来存储连接后的结果。如果空间不足,则会导致缓冲区溢出,这可能引发程序崩溃或安全漏洞。
与 strcpy() 不同,strcat() 不会覆盖目标字符串的全部内容,而是从目标字符串的终止符 '\0' 开始进行追加。
如果我们需要更安全、有最大长度限制的字符串连接,此时可以考虑使用 strncat() 函数。这是因为 strncat() 函数可以指定最多连接多少个字符,以防止缓冲区溢出。
