1、 使用 strcat()
strcat() 用于将第二个字符串拼接到第一个字符串的末尾。
#include <stdio.h>
#include <string.h>
int main() {
    char str1[50] = "Hello, ";  // 目标字符串(必须有足够空间)
    char str2[] = "World!";
    strcat(str1, str2);  // 拼接 str2 到 str1
    printf("拼接后: %s\n", str1);
    return 0;
}
2、使用 strncat()(更安全)
strncat() 可以限制拼接的字符数,防止溢出。
#include <stdio.h>
#include <string.h>
int main() {
    char str1[12] = "Hello, ";
    char str2[] = "World!";
    strncat(str1, str2, sizeof(str1) - strlen(str1) - 1);
    printf("拼接后: %s\n", str1);
    return 0;
}
3、手动拼接字符串
如果不想使用 strcat(),可以手动遍历并拼接字符串。
#include <stdio.h>
void string_concat(char *dest, const char *src) {
    while (*dest) dest++;  // 找到 dest 末尾
    while (*src) *dest++ = *src++;  // 复制 src 到 dest
    *dest = '\0';  // 添加终止符
}
int main() {
    char str1[50] = "Hello, ";
    char str2[] = "World!";
    string_concat(str1, str2);
    printf("拼接后: %s\n", str1);
    return 0;
}
4、动态分配内存拼接(适用于未知长度)
如果字符串长度不固定,可以使用 malloc() 分配新空间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* concat_dynamic(const char *str1, const char *str2) {
    size_t len1 = strlen(str1);
    size_t len2 = strlen(str2);
    char *result = (char *)malloc(len1 + len2 + 1);  // +1 预留 \0
    if (result) {
        strcpy(result, str1);
        strcat(result, str2);
    }
    return result;
}
int main() {
    char str1[] = "Hello, ";
    char str2[] = "World!";
    char *result = concat_dynamic(str1, str2);
    if (result) {
        printf("拼接后: %s\n", result);
        free(result);  // 释放动态分配的内存
    }
    return 0;
}
5、使用 snprintf()(安全方法)
snprintf() 可以安全地格式化字符串,并确保不会溢出。
#include <stdio.h>
int main() {
    char str1[50] = "Hello, ";
    char str2[] = "World!";
    snprintf(str1, sizeof(str1), "%s%s", str1, str2);
    printf("拼接后: %s\n", str1);
    return 0;
}