058. 编写函数连接两个字符串

在C语言中,字符串连接是一个常见的操作。标准库函数 strcat 可以实现字符串的连接,但它要求目标字符串有足够的空间来容纳连接后的结果。为了更好地理解字符串操作,我们可以手动编写一个字符串连接函数来实现这一功能。

C语言实现字符串连接

#include <stdio.h>
#include <string.h> // 用于 strlen 函数

// 自定义字符串连接函数
void customStrcat(char* dest, const char* src) {
    if (dest == NULL || src == NULL) {
        printf("输入的指针为空!\n");
        return;
    }

    // 找到目标字符串的末尾
    char* temp = dest;
    while (*temp != '\0') {
        temp++;
    }

    // 从源字符串的开头开始复制,直到遇到字符串结束符 '\0'
    while (*src != '\0') {
        *temp = *src;
        temp++;
        src++;
    }

    // 添加字符串结束符 '\0'
    *temp = '\0';
}

int main() {
    char str1[100] = "Hello, "; // 确保目标数组足够大
    char str2[] = "World!";

    printf("原始字符串1: %s\n", str1);
    printf("原始字符串2: %s\n", str2);

    // 调用自定义字符串连接函数
    customStrcat(str1, str2);

    printf("连接后的字符串: %s\n", str1);

    return 0;
}

代码说明

函数定义

  • customStrcat 接收两个参数:目标字符串 dest 和源字符串 src

  • 检查输入指针是否为空,避免空指针解引用导致的错误。

找到目标字符串的末尾

  • 使用一个临时指针 temp 遍历目标字符串 dest,直到找到字符串结束符 '\0',从而确定目标字符串的末尾位置。

复制源字符串

  • 从源字符串 src 的开头开始,逐个复制字符到目标字符串的末尾,直到遇到源字符串的结束符 '\0'

添加结束符

  • 在连接完成后,添加字符串结束符 '\0',确保目标字符串是一个有效的C字符串。

主函数

  • 定义一个足够大的目标数组 str1 和一个源字符串 str2

  • 调用 customStrcat 函数将源字符串连接到目标字符串的末尾。

  • 打印原始字符串和连接后的字符串。

示例运行

输入:

无输入

输出:

原始字符串1: Hello, 
原始字符串2: World!
连接后的字符串: Hello, World!

注意事项

  1. 目标数组的大小:确保目标数组 dest 的大小足够大,以容纳连接后的结果。否则,可能会导致缓冲区溢出。
  2. 空指针检查:在函数中检查输入指针是否为空,避免空指针解引用导致的程序崩溃。
  3. 字符串结束符:确保在连接完成后添加字符串结束符 '\0',否则目标字符串可能不会正确终止。

使用标准库函数 strcat

虽然手动实现字符串连接函数有助于理解字符串操作的原理,但在实际开发中,通常推荐使用标准库函数 strcat,因为它经过了优化,并且更安全(如果正确使用的话)。例如:

#include <stdio.h>
#include <string.h> // 包含 strcat 函数

int main() {
    char str1[100] = "Hello, "; // 确保目标数组足够大
    char str2[] = "World!";

    printf("原始字符串1: %s\n", str1);
    printf("原始字符串2: %s\n", str2);

    // 使用标准库函数 strcat
    strcat(str1, str2);

    printf("连接后的字符串: %s\n", str1);

    return 0;
}

总结

通过手动实现字符串连接函数,可以更好地理解字符串操作的基本原理。在实际应用中,建议使用标准库函数 strcat,但了解其内部实现原理有助于更好地使用它。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)