056. 编写函数实现字符串的复制

在C语言中,字符串的复制是一个常见的操作。标准库函数 strcpy 可以实现字符串的复制,但为了更好地理解字符串操作,我们可以通过手动编写一个字符串复制函数来实现这一功能。

C语言实现字符串复制

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

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

    // 遍历源字符串,逐个复制字符
    while (*src != '\0') {
        *dest = *src; // 复制字符
        dest++;       // 移动目标指针
        src++;        // 移动源指针
    }

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

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

    printf("原始字符串: %s\n", source);

    // 调用自定义字符串复制函数
    customStrcpy(destination, source);

    printf("复制后的字符串: %s\n", destination);

    return 0;
}

代码说明

函数定义

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

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

复制过程

  • 使用 while 循环遍历源字符串 src,直到遇到字符串结束符 '\0'

  • 在循环中,逐个将源字符串的字符复制到目标字符串中。

  • 每次复制后,目标指针 dest 和源指针 src 都向前移动一位。

添加结束符

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

主函数

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

  • 调用 customStrcpy 函数将源字符串复制到目标数组。

  • 打印原始字符串和复制后的字符串。

示例运行

输入:

无输入

输出:

原始字符串: Hello, World!
复制后的字符串: Hello, World!

注意事项

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

使用标准库函数 strcpy

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

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

int main() {
    char source[] = "Hello, World!";
    char destination[50];

    printf("原始字符串: %s\n", source);

    // 使用标准库函数 strcpy
    strcpy(destination, source);

    printf("复制后的字符串: %s\n", destination);

    return 0;
}

总结

通过手动实现字符串复制函数,可以更好地理解字符串操作的基本原理。在实际应用中,建议使用标准库函数 strcpy,但要注意目标数组的大小,避免缓冲区溢出。

视频讲解

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