http://blog.csdn.net/lwbeyond/article/details/6830424
memcpy() -- 拷贝内存内容
表头文件: #include <string.h>
定义函数: void *memcpy(void *dest, const void *src, size_tn)
函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束' '而结束
返回值: 返回指向dest的指针
附加说明: 指针src和dest所指的内存区域不可重叠
重叠的例子:
- #include <string.h>
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int a[10];
- /*0 1 2 3 4 5 6 7 8 9 */
- for(i; i < 10; i++)
- {
- a[i] = i;
- }
- /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/
- memmove(&a[4], a, sizeof(int)*6);
- /*0 1 2 3 0 1 2 3 0 1 不可以内存重叠*/
- for(i = 0; i < 10; i++)
- {
- printf("%d ",a[i]);
- }
- printf(" ");
- }
memmove() -- 拷贝内存内容
表头文件: #include <string.h>
定义函数: void *memmove(void *dest, const void *src, size_t n);
函数说明:memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。
不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。
返回值: 返回指向dest的指针。附加说明: 指针src和dest所指的内存区域可以重叠。
重叠的例子:
- <pre name="code" class="plain">#include <string.h>
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int a[10];
- /*0 1 2 3 4 5 6 7 8 9 */
- for(i; i < 10; i++)
- {
- a[i] = i;
- }
- /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/
- memmove(&a[4], a, sizeof(int)*6);
- /*0 1 2 3 0 1 2 3 4 5 可以内存重叠*/
- for(i = 0; i < 10; i++)
- {
- printf("%d ",a[i]);
- }
- printf(" ");
- }</pre>
- <pre></pre>
- <br>
- <span style="font-size:18px">有时VC和GCC结果显示二者一样,这是因为编译器都优化成了可以考虑内存重叠的情况。</span><strong><span style="font-size:18px"><br>
- </span></strong><br>