memcpy()函数与strcpy()函数

本文介绍了内存拷贝函数memcpy和字符串复制函数strcpy的使用方法及区别。memcpy适用于任意类型的数据拷贝,不关心数据类型,而strcpy专门用于字符数组的复制。在安全性上,memcpy相对更安全,因为它允许指定拷贝字节数。在效率方面,当拷贝相同字符串时,strcpy可能更快。总结来说,memcpy应用更广泛,但strcpy在特定场景下效率更高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

memcpy(内存拷贝函数)

memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;

#include <string.h>

void* memcpy(void* destination, const void* source, size_t num);

void* dest 目标内存 const void* src 源内存 size_t num 字节个数

return:函数返回一个指向dest的指针。

void *mymemcpy(void *dst, const void *src, size_t num)
{
    assert((NULL != dst) && (NULL != src));
    int wordnum = num / 4;  //计算有多少个32位,按4字节拷贝
    int slice = num % 4;    //剩余的按字节拷贝
    int *pintsrc = (int *)src; //强制转换类型,不同类型的不能进行拷贝
    int *pintdst = (int *)dst;
    while(wordnum--)
    {
        *pintsrc++ = *pintsrc++;
    }
 
    while(slice--)
    {
        ((char *)pintdst++) = *((char *)pintsrc++);
    }
    return dst;
}

strcpy()函数

strcpy只能应用字符类型的复制

#include <string.h>

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

return:成功执行后返回目标数组指针 dest

dest :目标字符串指针,src :源字符串指针。

注意:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置 src 所包含的字符串(包含结束符)。
如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。

void* my_strcpy(void *arr, void *brr)
{
    int j = 0;
    int k = 0;
    while(brr[j] != 0)
    {
        arr[j] = brr[j];
        j++;
    }
    arr[j] = '\0';
    return arr;
}
  1. memcpy相比使用strcpy会更加的安全,当然也可以使用strcpy的安全板本strncpy函数;

  2. strcpy一定会拷贝字符串结尾符’\0’,memcpy在拷贝字符串的时候,根据指定拷贝字节数拷贝字符串,是否拷贝‘\0’结束符,根据count的大小。

  3. strcpy只能应用字符类型的复制,而memcpy应用范围更广,任何类型都可以;

  4. 在拷贝相同的字符串,且字节数相同(包括‘]0’)的情况下,strcpy效率比memcpy效率更快。

  5. memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,strcpy()只适合赋值字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值