首页 > 编程笔记 > C语言笔记

C语言字符串复制(拷贝)的3种方法

在C语言中,字符串的复制(也叫拷贝)是一个常见的操作。C语言提供了多种函数来实现字符串的复制,其中最常用的是 strcpy、strncpy 和 memcpy。这些函数各有特点,适用于不同的场景。

1. strcpy 函数

strcpy 函数是最基本的字符串复制函数,它的原型如下:

char *strcpy(char *dest, const char *src);

strcpy 函数将 src 指向的字符串复制到 dest 指向的内存空间中,包括字符串结束符'\0'。使用 strcpy 时需要注意以下几点:


以下是 strcpy 的使用示例:

#include <stdio.h>
#include <string.h>

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

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

    return 0;
}

2. strncpy 函数

strncpy 函数是 strcpy 的一个更安全的版本,它的原型如下:

char *strncpy(char *dest, const char *src, size_t n);

strncpy 函数将 src 指向的字符串的前 n 个字符复制到 dest 指向的内存空间中。strncpy 的特点包括:


以下是 strncpy 的使用示例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[10];

    strncpy(dest, src, sizeof(dest));
    dest[sizeof(dest) - 1] = '\0';  // 确保字符串以 null 结尾
    printf("复制后的字符串: %s\n", dest);

    return 0;
}

3. memcpy 函数

memcpy 函数是一个更通用的内存复制函数,不仅限于字符串,它的原型如下:

void *memcpy(void *dest, const void *src, size_t n);

memcpy 函数将 src 指向的内存区域的前 n 个字节复制到 dest 指向的内存区域。memcpy 的特点包括:


以下是 memcpy 的使用示例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20];

    memcpy(dest, src, strlen(src) + 1);  // +1 复制 null 终止符
    printf("复制后的字符串: %s\n", dest);

    return 0;
}

三个函数的比较和总结

为了更好地理解这三个函数的区别,我们可以通过一个表格来比较它们的特点:

特性 strcpy strncpy memcpy
复制类型 字符串 字符串 任意内存
长度限制
自动添加 '\0' 条件性
缓冲区溢出风险
性能


strcpy 函数简单直接但存在安全隐患,strncpy 函数提供了更好的安全性但使用略显复杂,而 memcpy 函数则提供了更广泛的应用场景。


声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。