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