memcpy函数

memcpy (void* _Dst,void const* _Src,size_t _Size)
作用:将_Src数组中的内容复制_Size个字节长度,给到_Dst数组。
注意:指针是用void修饰的,所以_Dst和_Src两个指针都是由原有的数据类型强制转换为void类型进行操作的,这样,不同类型之间就可以进行复制传值操作了,但是要注意的一点是,不同类型之间的数据长度不同,所以在复制时候要注意匹配相同的数据长度。此外,在进行处理时,最好采用16进制的方式去操作,这样理解起来更为直观。

char a[8]={0x12,0x34,0x56,0x78,0x90,0x14,0x52,0x46 };
short b=0;
memcpy(&b,a+1,2);
printf("b=%x", b);

此段代码的作用是把0x34和0x56拼接起来送到b,输出的最终结果是:0x5634。
输出用的是%x,表示以十六进制进行输出。
char型数据占用一个字节,而short型数据占用两个字节,所以把char型数据拷贝到short型数据中时,传递的字节长度是2,如果把char型数据传递给int型数据,传递的字节长度应该是4。
拼接的时候低字节放在低位,高字节放在高位。
此外,memset函数在对数组进行赋值的过程中,在dest的末尾不会追加结束符’\0’,因此,在使用此函数时,一般不要把目标数组全部占用,留一位写’\0’.
eg:

void test()
{
	char str1[] = "123456";
	char str2[3];
	memcpy(str2, str1, 3);
	cout << str2 << endl;
}
运行结果:123烫烫烫烫烫烫烫烫烫烫烫烫蘮??	
解决办法:
void test()
{
	char str1[] = "123456";
	char str2[4];
	memcpy(str2, str1, 3);
	str2[3]=0;
	cout << str2 << endl;
}
运行结果:123
或者
	char str1[] = "123456";
	char str2[4];
	memset(str2,0,4);
	memcpy(str2, str1, 3);
	cout << str2 << endl;
运行结果:123
或者
	char str1[] = "123";
	char str2[4];
	memcpy(str2, str1, strlen(str1)+1);
	cout << str2 << endl;
运行结果:123

以上可以看出,要存储字符串的数组应该比字符串的长度至少多1,多出来这一位就是为了存储结束符’\0’.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值