C语言如何实现字符串连接?

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

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

c语言concatenate
(图片来源网络,侵删)

方法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):

c语言concatenate
(图片来源网络,侵删)

示例代码

#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(),以防缓冲区溢出。
c语言concatenate
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦默认分页样式在哪个文件里?
« 上一篇 01-31
define在C语言中如何正确使用?
下一篇 » 01-31
取消
微信二维码
支付宝二维码

目录[+]