如何用memcpy内存拷贝一个结构体 内存拷贝的问题

memcpy()&--&拷贝内存内容
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
3所需头文件
C语言中使用#
C++中使用#include 和#include 都可以。
函数返回指向dest的指针。
1.source和destin所指的内存区域可以重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针.
2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
注意:source和destin都不一定是数组,任意的可读写的空间均可。
与strcpy函数的区别
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
void*__cdeclmemcpy(
constvoid*src,
size_tcount
#ifdefined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)
externvoidRtlMoveMemory(void*,constvoid*,size_tcount);
RtlMoveMemory(dst,src,count);
while(count--){
*(char*)dst=*(char*)
dst=(char*)dst+1;
src=(char*)src+1;
return(ret);
coreutils中:
void*memcpy(void*destaddr,voidconst*srcaddr,size_tlen)
char*dest=
charconst*src=
while(len--&0)
*dest++=*src++;
void*memcpy(void*dest,constvoid*src,size_tcount)
assert(dest!=NULL&&src!=NULL);
char*tmp=constchar*s=
for(size_ti=0;i
tmp[i]=s[i];
程序例example1
作用:将s中的字符串复制到字符d中。
//memcpy.c
char*s="GoldenGlobalView";
chard[20];
memcpy(d,s,(strlen(s)+1));
printf("%s",d);
getchar();
输出结果:Golden&Global&View
作用:将s中第14个字符开始的4个连续字符复制到d中。(从0开始)
char*s="GoldenGlobalView";
chard[20];
memcpy(d,s+14,4);//从第14个字符(V)开始复制,连续复制4个字符(View)
&//memcpy(d,s+14*sizeof(char),4*sizeof(char));也可
d[4]='\0';
printf("%s",d);
getchar();
输出结果: View
作用:复制后覆盖原有部分数据
intmain(void)
charsrc[]="******************************";
chardest[]="abcdefghijlkmnopqrstuvwxyz0123as6";
printf("destinationbeforememcpy:%s\n",dest);
memcpy(dest,src,strlen(src));
printf("destinationaftermemcpy:%s\n",dest);
输出结果:
destination&before&memcpy:abcdefghijlkmnopqrstuvwxyz0123as6
destination&after&memcpy:&******************************as6
int main()
&&& char a[30] =
&&& char b[30] =
"hi\0zengxiaolong";
&&&&strcpy(a,
b);&&&&&&&&&&&&
//a[30] = "hi\0ing
printf("strcpy():");
&&& for(i = 0; i
& 30; i++)
printf("%c", a[i]);&&
&&&&memcpy(a,
b, 30);&&&&&&&&
//a[30] = "hi\0zengxiaolong"
printf("\nmemcpy():");
&&& for(i = 0; i
& 30; i++)
printf("%c", a[i]);&&
//hi&zengxiaolong
&&& printf("\n i
= %d\n", i); //30
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2010年4月 Delphi大版内专家分月排行榜第二2010年3月 C++ Builder大版内专家分月排行榜第二2009年9月 C++ Builder大版内专家分月排行榜第二2005年10月 Java大版内专家分月排行榜第二2006年11月 C++ Builder大版内专家分月排行榜第二2006年10月 C++ Builder大版内专家分月排行榜第二2006年9月 C++ Builder大版内专家分月排行榜第二2006年7月 C++ Builder大版内专家分月排行榜第二2004年1月 C++ Builder大版内专家分月排行榜第二2006年1月 Delphi大版内专家分月排行榜第二
2010年5月 C++ Builder大版内专家分月排行榜第三2006年8月 C++ Builder大版内专家分月排行榜第三2004年2月 C++ Builder大版内专家分月排行榜第三2003年8月 C++ Builder大版内专家分月排行榜第三2006年4月 Delphi大版内专家分月排行榜第三2005年12月 Delphi大版内专家分月排行榜第三
2010年4月 Delphi大版内专家分月排行榜第二2010年3月 C++ Builder大版内专家分月排行榜第二2009年9月 C++ Builder大版内专家分月排行榜第二2005年10月 Java大版内专家分月排行榜第二2006年11月 C++ Builder大版内专家分月排行榜第二2006年10月 C++ Builder大版内专家分月排行榜第二2006年9月 C++ Builder大版内专家分月排行榜第二2006年7月 C++ Builder大版内专家分月排行榜第二2004年1月 C++ Builder大版内专家分月排行榜第二2006年1月 Delphi大版内专家分月排行榜第二
2010年5月 C++ Builder大版内专家分月排行榜第三2006年8月 C++ Builder大版内专家分月排行榜第三2004年2月 C++ Builder大版内专家分月排行榜第三2003年8月 C++ Builder大版内专家分月排行榜第三2006年4月 Delphi大版内专家分月排行榜第三2005年12月 Delphi大版内专家分月排行榜第三
2008年2月 VB大版内专家分月排行榜第一2003年4月 VC/MFC大版内专家分月排行榜第一2002年11月 VC/MFC大版内专家分月排行榜第一
2011年11月 VC/MFC大版内专家分月排行榜第二2008年3月 VB大版内专家分月排行榜第二2008年3月 硬件/嵌入开发大版内专家分月排行榜第二2003年4月 其他开发语言大版内专家分月排行榜第二2003年4月 VB大版内专家分月排行榜第二2003年3月 VB大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。怎么将一结构数据复制到一char或BYTE内存块中 - VC/MFC当前位置:& &&&怎么将一结构数据复制到一char或BYTE内存块中怎么将一结构数据复制到一char或BYTE内存块中&&网友分享于:&&浏览:102次如何将一结构数据复制到一char或BYTE内存块中?假设结构如下:
struct & test
& LPWSTR &
如何将该结构数据复制到一char或BYTE内存块中?------解决方案--------------------直接memcpy过去即可,有什么问题捏???
char dst[128];
memcpy( (void*)dst, (void*)test, sizeof(test) );
------解决方案--------------------在file.Read(lpFileName, (UINT)testtofile.m_FileNameSize); 这句后边加
lpFileName[testtofile.m_FileNameSize] =
'\0 ';
然后MessageBox(CString(lpFileName));
------解决方案--------------------可能是少了个 '\0 '
------解决方案--------------------memcpy吧.但要注意的一些结构指针带来的问题,如一个结构内有一个指针指向一块内存,用memcpy复制一个新的结构实例后,也指向该块内存,当该内存随一个结构实例释放后,另外一个实例就会出错的.像这种情况,最好将struct定义成class.编后对应的构造或复制函数以及重载=操作符.
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 结构体 赋值 内存拷贝 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信