memcpy函数和strcpy函数

本文详细介绍了C/C++中的memcpy和strcpy函数。memcpy用于任意类型的数据拷贝,而strcpy专用于字符串拷贝。文章对比了两者的实现方式及适用场景,并强调了memcpy在地址对齐情况下的高效性。

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

1、memcpy指的是C和C++使用的内存拷贝函数,memcpy函数的功能时从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中

  • 函数原型:  void *memcpy(void *dest, const void* src, size_t n);   //dest和src不一定是数组,任意的可读可写的空间均可
  • 头文件:C中  #include<string.h>
  •                C++中 #include<cstring>
  • 函数返回指向des的指针
  • memcpy思想:大部分认为memcpy是一个char到char的拷贝循环,担心它的效率。实际上,memcpy是一个效率最高的内存拷贝函数,他不会那么傻来做一个一个字节的内存拷贝,在地址不对齐的情况下,他是一个字节一个字节的拷,地址对齐以后,就会使用CPU字长来拷,32bit或64bit,还会根据CPU的类型选择一些优化的指令来进行拷贝。总的来说,memcpy的实现是CPU类型、操作系统、cLib相关的。毫无疑问,它是内存拷贝里效率最高的,可以放心使用

2、memcpy函数的实现:

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;
}

3、strcpy函数的实现:

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;
}

4、strcpy和memcpy的区别:

  • 复制的内容不同,strcpy只能复制字符串,而memcpy可以复制任意内容,例如:字符数组、整型、结构体、类等
  • 复制的方法不同,strcpy不需要指定长度,它遇到被复制字符的串结束符“\0”才结束,所以容易溢出。memcpy是根据其第三个参数决定复制的长度
  • 用途不同,通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值