C语言中,字符串是 字符数组(char[]),标准库 string.h 提供了一些字符串拼接函数,比如 strcat() 和 strncat()。除此之外,也可以手动实现字符串拼接。C 语言的字符串操作需要手动管理内存,使用安全方法可以避免溢出和内存泄漏。

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;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表