memcpy复制整型数组相关
————————————————分割线————————————————
分割线以内的博客转载自:https://blog.csdn.net/qq_38993096/article/details/88377285,侵删
C语言:#include<string.h>
C++:#include
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,是用指针进行操作的。
注意:
1.strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
2.memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
strcpy和memcpy主要有以下3方面的区别:
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
————————————————
版权声明:本文为CSDN博主「fjghgsrfdhbrs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38993096/java/article/details/88377285
memcpy(d,s+12,4);//从第13个字符(V)开始复制,连续复制4个字符(View)到s d[4]='\0';//必须有这句,不然字符串会乱码 //memcpy(d,s+12*sizeof(char),4*sizeof(char));也可
函数源码:
void *memcpy(void *dest, const void *src, int count) { void *ptr = dest; if (NULL == dest || NULL == src || count <= 0) { return NULL; } while (count--) *(char *)dest++ = *(char *)src++; return ptr; }
————————————————分割线————————————————
补充整型数组复制相关:
整型数组复制的时候,第三个参数应该为sizeof(int) * size (同理会有sizeof(long int) * size, sizeof(Node) * size...)
在memcpy的源码中可以看到,复制是以char为地址单元进行的,所以第三个参数只传进size的话,那么将会只复制前size个char地址单元的数据。
int main() { int a[4] = {1, 2, 3, 100}; int b[3] = {4, 5, 6}; memcpy(b, a, 4); // 通常int = 4 * char, 所以复制的结果为b = {1, 5, 6}, 只复制了前4个char地址的内容 memcpy(b, a, sizeof(int) * 3); // 这里的sizeof(int) * 3 == 12, 所以复制结果为b = {1, 2, 3}; for (int i = 0; i < 3; i++) { printf("%d ", b[i]); } return 0; }
posted on 2020-07-07 00:57 superhero11 阅读(5196) 评论(0) 编辑 收藏 举报