了解memcpy

Gre*_*g G 6 c++ memory memcpy

int a = 10;
int* pA = &a;
long long b = 200;
long long* pB = &b;

memcpy (pB,pA,4);
memcpy (pB+1,pA,4);

cout<<"I'm a memcpy!: "<<*(pB)<<endl;
Run Code Online (Sandbox Code Playgroud)

我正在用memcpy做一些测试来教自己记忆是如何工作的.我想要做的是使b =到"1010".我可以将值从a复制到b,但是然后我尝试将内存偏移1个字节并写入另外10个但是它不起作用它只输出"10".

要获得1010的值,我需要做什么?

bta*_*bta 9

您的代码存在的一些问题:

  • 您复制4个字节,但目标是类型int.由于int不保证是任何特定大小,因此您需要确保它在执行此类操作之前至少长达4个字节memcpy.
  • memcpy在字节级别上工作,但整数是一系列字节.根据您的目标体系结构,整数内的字节可能会以不同的方式排列(big-endian,little-endian等).memcpy在整数上使用可能会也可能不会达到预期效果.在学习如何memcpy和朋友的工作时,最好使用字节数组.
  • 你的第二个memcpy用途pB+1为目标.这不会使指针前进一个字节,而是按sizeof(*pB)字节前进.在这种情况下,它使它指向一个无效的地址(超过变量的末尾).此调用memcpy将损坏随机内存,这可能会导致程序崩溃或导致不可预测的结果.