C语言mergestr函数如何实现字符串合并?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 C语言 正文

方法1:使用标准库函数 strcatstrcpy

这是最简单的方法,适用于已知目标字符串足够大的情况。

#include <stdio.h>
#include <string.h>
void mergeStrings(const char *str1, const char *str2, char *result) {
    strcpy(result, str1);  // 复制str1到result
    strcat(result, str2);  // 将str2追加到result
}
int main() {
    char str1[] = "Hello, ";
    char str2[] = "world!";
    char result[50];  // 确保足够大
    mergeStrings(str1, str2, result);
    printf("合并后的字符串: %s\n", result);
    return 0;
}

说明

  • strcpy 用于复制第一个字符串。
  • strcat 用于追加第二个字符串。
  • 需要确保 result 数组足够大,否则会导致缓冲区溢出。

方法2:手动计算长度并合并

如果不使用 strcpystrcat,可以手动计算字符串长度并合并。

#include <stdio.h>
void mergeStringsManual(const char *str1, const char *str2, char *result) {
    int i = 0, j = 0;
    // 复制str1到result
    while (str1[i] != '\0') {
        result[i] = str1[i];
        i++;
    }
    // 追加str2到result
    while (str2[j] != '\0') {
        result[i + j] = str2[j];
        j++;
    }
    result[i + j] = '\0';  // 添加字符串结束符
}
int main() {
    char str1[] = "Hello, ";
    char str2[] = "world!";
    char result[50];
    mergeStringsManual(str1, str2, result);
    printf("合并后的字符串: %s\n", result);
    return 0;
}

说明

  • 手动遍历字符串并复制字符。
  • 最后需要手动添加 '\0' 表示字符串结束。

方法3:动态分配内存(更安全)

如果目标字符串长度不确定,可以使用动态内存分配(malloc)来避免缓冲区溢出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* mergeStringsDynamic(const char *str1, const char *str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    char *result = (char *)malloc(len1 + len2 + 1);  // +1 for '\0'
    if (result == NULL) {
        printf("内存分配失败!\n");
        return NULL;
    }
    strcpy(result, str1);
    strcat(result, str2);
    return result;
}
int main() {
    char str1[] = "Hello, ";
    char str2[] = "world!";
    char *result = mergeStringsDynamic(str1, str2);
    if (result != NULL) {
        printf("合并后的字符串: %s\n", result);
        free(result);  // 释放动态分配的内存
    }
    return 0;
}

说明

  • 使用 malloc 动态分配足够大的内存。
  • 使用后必须 free 释放内存,避免内存泄漏。

方法4:合并多个字符串(可变参数)

如果需要合并多个字符串,可以使用可变参数函数(如 snprintf)。

#include <stdio.h>
#include <stdarg.h>
char* mergeMultipleStrings(int count, ...) {
    va_list args;
    va_start(args, count);
    // 计算总长度
    int total_len = 0;
    for (int i = 0; i < count; i++) {
        const char *str = va_arg(args, const char*);
        total_len += strlen(str);
    }
    va_end(args);
    // 分配内存
    char *result = (char *)malloc(total_len + 1);
    if (result == NULL) {
        printf("内存分配失败!\n");
        return NULL;
    }
    // 合并字符串
    va_start(args, count);
    int pos = 0;
    for (int i = 0; i < count; i++) {
        const char *str = va_arg(args, const char*);
        strcpy(result + pos, str);
        pos += strlen(str);
    }
    va_end(args);
    result[total_len] = '\0';
    return result;
}
int main() {
    char *result = mergeMultipleStrings(3, "Hello, ", "world", "!");
    if (result != NULL) {
        printf("合并后的字符串: %s\n", result);
        free(result);
    }
    return 0;
}

说明

  • 使用 va_list 处理可变参数。
  • 先计算总长度,再分配内存并合并字符串。

方法 适用场景 优点 缺点
strcpy + strcat 已知目标字符串足够大 简单直接 可能缓冲区溢出
手动合并 不使用标准库函数 灵活 代码稍长
动态分配 字符串长度不确定 安全(避免溢出) 需要手动 free
可变参数 合并多个字符串 通用 实现较复杂

选择合适的方法取决于具体需求,如果只是简单合并两个已知长度的字符串,方法1或方法2即可;如果需要更安全或更灵活的方式,方法3或方法4更合适。

-- 展开阅读全文 --
头像
dede如何增加图片上传功能?
« 上一篇 04-15
remove在C语言中如何正确使用?
下一篇 » 04-15

相关文章

取消
微信二维码
支付宝二维码

目录[+]