memcpy的用法
来源:互联网 发布:网吧网络系统维护公司 编辑:程序博客网 时间:2024/04/28 17:09
原型:
void *memcpy(void *dest, const void *src, size_t n);
功能:
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
C++头文件
#include<cstring>
说明:
1、由于函数的实参是void*,所以可以拷贝任意的类型对象
2、src和dest所指的内存可能重叠,但是如果src和dest所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。
3、如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
4、首先要判断指针的值不能为空,desc为空的话肯定不能拷贝内存空间,src为空相当于没有拷贝;所以之间return掉;
5、""空串是指内容为0,NULL是0,不是串;两个不等价;
6、int dest[2] = {0};这是对int 类型的数组初始化的方法;如果是char类型,就用char a[5] = "1234"; 注意数组下标要 多于实际看到的字符数,因为还有'/0'
7、memcpy1(dest,src,sizeof(src));注意里面的sizeof(src),这个是包括字符串的结束符'/0'的;所以不用担心printf(dest); 但是如果用memcpy1(dest,src,4);没有'/0'就要*(dest+5) = '/0';这样保证是一个完整的字符串;
8、如果初始化的时候:char dest[1024] = "12345666";//{0}; const char src[5] = "3333";
那么拷贝的时候,如果用memcpy1(dest,src,sizeof(src));
则printf(dest);出来是3333如果memcpy1(dest,src,4);则printf(dest);出来是33335666;因为上面的sizeof(src),包含'/0',所以拷贝过去的字符串以'/0',结束,就只有3333,而如果传4个字符,'/0'是第五个字符,那就遇到dest[1024] 的'/0'结束,所以是33335666
// 字符转换.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"#include"string"#include"sstream"using namespace std;//#pragma warning(disable : 4996)struct STUDENT{char _name[32];int _age;bool _gender;};STUDENT a = { "Li Lei", 20, true };STUDENT b = { "Han MeiMei", 19, false };int len = sizeof(STUDENT);int _tmain(int argc, _TCHAR* argv[]){char buffer[128] = { 0 };char* p = buffer;int bufferLen = 0;//数据长度int num1 = 100;int num2;//数据打包memcpy(p,&a,sizeof(a));p += sizeof(a);bufferLen += sizeof(a);memcpy(p, &num1, sizeof(num1));p += sizeof(num1);bufferLen += sizeof(num1);memcpy(p, &b, sizeof(b));p += sizeof(b); bufferLen += sizeof(b);//解析STUDENT c;STUDENT d;memcpy(&c, buffer, sizeof(STUDENT));memcpy(&num2, buffer + sizeof(STUDENT), sizeof(int));memcpy(&d, buffer + sizeof(STUDENT)+sizeof(int), sizeof(STUDENT));cout << c._name << " "<<c._age<<" "<<c._gender<<endl;cout << num2 << endl;cout << d._name << " " << d._age << " " << d._gender << endl;system("pause");return 0;}
- 关于memcpy的用法
- memcpy的用法总结
- memcpy函数的用法
- memcpy的用法
- memcpy的用法 总结
- memcpy的用法总结
- memcpy的用法总结
- memcpy的用法总结
- memcpy函数的用法
- memcpy函数的用法
- memcpy的用法
- memcpy的用法总结
- memcpy的用法总结
- memcpy的用法简介
- memcpy的用法总结
- 关于memcpy的用法
- memcpy的用法
- memcpy的用法总结
- 各种编程语言做逆向工程UML图的软件
- Linux SWAP 交换分区配置说明
- java 多线程 两种实现方式
- angular 双向绑定的实现原理
- python之类--socket
- memcpy的用法
- Unity5.3Json测试学习
- 【MFC】 Unicode下CString和char *之间的互相转换
- 吐槽java之《程序员的呐喊》读后总结
- Linux 中交换空间 (swap)应该分多大才好?
- maven
- 翻译英文技术文档
- wrapper | The nexus-webapp service is not installed - The specified service does not exist
- Oracle 12c 使用scott等普通用户的方法