memcpy的使用与实现

简介: memcpy的使用与实现

对任意类型的数组赋

使用规则

1.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。

2.与strcpy相比这个函数在遇到 ‘\0’ 的时候并不会停下来。

3.如果source和destination有任何的重叠,复制的结果都是未定义的。

(可以看下一期memmove的文章去完美的解决这个问题)

代码实现

void* my_memcpy(void* dest, void* sor, size_t num)
{
  void* ret = dest;//纪录dest的初始地址
  for (int i = 0; i < num; i++)
  {//memcpy是按内存大小赋值,强转成char*后赋值,以免遗漏
    *(char*)dest = *(char*)sor;
    dest = (char*)dest + 1;
    sor = (char*)sor + 1;
  }
  return ret;
}

样例使用

#include <stdio.h>
#include <string.h>
void* my_memcpy(void* dest, void* sor, size_t num)
{
  void* ret = dest;//纪录dest的初始地址
  for (int i = 0; i < num; i++)
  {//memcpy是按内存大小赋值,强转成char*后赋值,以免遗漏
    *(char*)dest = *(char*)sor;
    dest = (char*)dest + 1;
    sor = (char*)sor + 1;
  }
  return ret;
}
int main()
{
  int a[] = { 1,2,3,4,5 };
  int b[20] = { 0 };
  my_memcpy(b, a, 17);
  for (int i = 0; i < 5; i++)
    cout << b[i] << ' ';
  //小端存储,赋17字节的内存就能吧a[4]赋值到b[4]
  return 0;
}

运行结果

目录
相关文章
|
1月前
|
编译器 C++
C++中memcpy函数的实现
C++中memcpy函数的实现
|
3月前
|
C语言
memcpy不适用的场景
memcpy不适用的场景
|
3月前
|
算法 编译器 C语言
memcpy内存拷贝函数
memcpy内存拷贝函数
37 0
|
4月前
|
存储 编译器 BI
内存函数​(memcpy、memmove、memset、memcmp)
内存函数​(memcpy、memmove、memset、memcmp)
|
4月前
|
存储 安全
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
52 0
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
【memcpy和memmove函数的详解】
我们知道,strcpy函数是拷贝字符串的,但是它并不能拷贝例如整型,结构体之类的东西,strcpy有一定的局限性,memcpy函数可以说涵盖了所有类型数据的拷贝。
memmove和memcpy的区别
你真的懂memmove和memcpy的区别吗
|
算法 程序员 编译器
C/C++ memcpy的实现
memcpy作为常用函数,想必相当一部分程序员都在用的极其方便的时候却从未关注过它的具体实现,平日自然也没什么问题。但对于算法能力薄弱或者不喜欢刷题的同学来说,一旦遇见需要亲自手写的情况,突然碰见非常容易措手不及。
208 0
C/C++ memcpy的实现
memcpy和memmove的区别及实现
memcpy和memmove的区别及实现
100 0
memcpy和memmove的区别及实现