在C语言中,"concatenate"(连接)字符串通常指的是将两个或多个字符串首尾相连,形成一个新的字符串,C语言标准库中并没有直接提供名为 concatenate 的函数,但我们可以使用 <string.h> 头文件中的 strcat() 或 strncat() 函数来实现,或者手动编写连接函数。

(图片来源网络,侵删)
方法1:使用 strcat() 函数
strcat(dest, src) 将 src 字符串连接到 dest 字符串的末尾,并覆盖 dest 的终止符 \0。注意:dest 必须有足够的空间容纳连接后的结果,否则会导致缓冲区溢出。
示例代码
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello, "; // 确保dest足够大
char str2[] = "World!";
strcat(str1, str2); // 将str2连接到str1末尾
printf("连接后的字符串: %s\n", str1); // 输出: Hello, World!
return 0;
}
注意事项
dest必须足够大,否则可能引发缓冲区溢出(安全风险)。dest不是以\0行为未定义。
方法2:使用 strncat() 函数(更安全)
strncat(dest, src, n) 限制最多连接 n 个字符,比 strcat() 更安全。
示例代码
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello, ";
char str2[] = "World!";
strncat(str1, str2, sizeof(str1) - strlen(str1) - 1); // 安全连接
printf("连接后的字符串: %s\n", str1); // 输出: Hello, World!
return 0;
}
注意事项
- 仍然需要确保
dest足够大。 n不应超过dest剩余的空间大小。
方法3:手动实现字符串连接
如果不依赖标准库,可以手动编写连接函数:
示例代码
#include <stdio.h>
void concat(char *dest, const char *src) {
int i = 0, j = 0;
// 移动指针到dest的末尾
while (dest[i] != '\0') {
i++;
}
// 复制src到dest末尾
while (src[j] != '\0') {
dest[i] = src[j];
i++;
j++;
}
dest[i] = '\0'; // 添加终止符
}
int main() {
char str1[50] = "Hello, ";
char str2[] = "World!";
concat(str1, str2);
printf("连接后的字符串: %s\n", str1); // 输出: Hello, World!
return 0;
}
注意事项
- 必须确保
dest有足够的空间。 - 需要手动处理
\0终止符。
方法4:动态内存分配(更灵活)
如果目标字符串大小不确定,可以使用动态内存分配(malloc + strcpy + realloc):

(图片来源网络,侵删)
示例代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* concat_dynamic(const char *str1, const char *str2) {
char *result = malloc(strlen(str1) + strlen(str2) + 1); // +1 for '\0'
if (!result) {
perror("内存分配失败");
exit(1);
}
strcpy(result, str1);
strcat(result, str2);
return result;
}
int main() {
const char *str1 = "Hello, ";
const char *str2 = "World!";
char *result = concat_dynamic(str1, str2);
printf("连接后的字符串: %s\n", result); // 输出: Hello, World!
free(result); // 释放动态分配的内存
return 0;
}
注意事项
- 动态分配的内存需要手动
free()释放,避免内存泄漏。 - 适用于不确定字符串长度的情况。
| 方法 | 安全性 | 灵活性 | 适用场景 |
|---|---|---|---|
strcat() |
低(需确保 dest 足够大) |
低 | 固定大小字符串 |
strncat() |
中(限制连接长度) | 中 | 需要部分连接 |
| 手动实现 | 中(可控) | 中 | 无标准库时 |
| 动态分配 | 高(自动调整大小) | 高 | 动态字符串 |
推荐做法:
- 如果目标字符串大小固定,优先使用
strncat()。 - 如果不确定字符串长度,使用动态分配(
malloc+strcpy+strcat)。 - 避免直接使用
strcat(),以防缓冲区溢出。

(图片来源网络,侵删)
