C语言字符串拼接的几种(5种)方法

字符串拼接是将多个字符串合并为一个字符串的操作,字符串拼接在处理文本、构建路径、生成动态消息等任务时非常有用。

字符串拼接是我们开发中常见的需求,下面介绍c语言中几种(5种)字符串拼接的方法,通过例子、函数定义、参数说明,并介绍它们的使用场景和区别。

1. 使用 strcat() 函数

标准库函数,简单易用,下面是例子。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "online ";
    char str2[] = "compiler!";
    strcat(str1, str2); // 将str2拼接到str1后
    printf("%s\n", str1); // 输出: online compiler!
    return 0;
}
函数定义
char *strcat(char *dest, const char *src); 

参数说明

参数类型说明
destchar*目标字符串(必须有足够的空间存放拼接后的结果)
srcconst char*源字符串(被拼接到 dest 后面)

返回值

返回 dest 的指针(即拼接后的字符串)。

注意:strcat() 不会检查目标缓冲区大小,可能导致溢出。

2. 使用 strncat() 函数

可指定最大拼接长度,使用起来比strcat()函数更安全,下面是例子。
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "online ";
    char str2[] = "compiler!";
    strncat(str1, str2, sizeof(str1) - strlen(str1) - 1); // 防止溢出
    printf("%s\n", str1); // 输出: Online compiler!
    return 0;
}

函数定义

char *strncat(char *dest, const char *src, size_t n);
参数说明
参数类型说明
destchar*目标字符串(必须有足够的空间)
srcconst char*源字符串
nsize_t最多拼接的字符数(防止溢出)

返回值

返回 dest 的指针。

3. 自定义拼接字符串函数

不使用内置函数,完全控制,适合特殊需求,下面是例子。

#include <stdio.h>

void strcat(char *dest, const char *src) {
    while (*dest) dest++; // 找到dest的结尾
    while (*src) {
        *dest++ = *src++; // 逐个复制字符
    }
    *dest = '\0'; // 添加终止符
}

int main() {
    char str1[50] = "online ";
    char str2[] = "compiler!";
    strcat(str1, str2);
    printf("%s\n", str1); // 输出: online compiler!
    return 0;
} 

4. 使用 sprintf() 或 snprintf()

使用格式化拼接,适合更复杂的字符串表示格式,下面是例子。

#include <stdio.h>

int main() {
    char str1[50] = "online ";
    char str2[] = "compiler!";
    sprintf(str1 + strlen(str1), "%s", str2); // 拼接
    printf("%s\n", str1); // 输出: online compiler!
    return 0;
} 
建议:优先使用 snprintf() 避免溢出。

5. 动态内存分配(malloc + strcpy/strcat)

灵活处理未知长度的字符串,需手动释放内存。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char *str1 = "online, ";
    char *str2 = "compiler!";
    char *result = malloc(strlen(str1) + strlen(str2) + 1);
    strcpy(result, str1);
    strcat(result, str2);
    printf("%s\n", result); // 输出: online, compiler!
    free(result); // 释放内存
    return 0;
} 

使用区别和场景

方法适用场景安全性备注
strcat()已知固定长度不安全(可能溢出)仅适用于小字符串
strncat()需要控制长度较安全推荐使用
sprintf()格式化拼接可能溢出适合复杂拼接
snprintf()安全格式化安全最佳选择
自定义函数学习/优化需自行管理适用于嵌入式开发
malloc + strcpy动态字符串安全但需手动释放适合未知长度字符串