memmove的用法
简介
原型
#include <string.h>//头文件
void *memmove(void *dest, const void *src, size_tcount);
意义
由src所指内存区域复制count个字节到dest所指内存区域。
src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针。
具体复制逻辑
-
当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
-
当源内存的首地址大于目标内存的首地址时,实行正向拷贝
-
当源内存的首地址小于目标内存的首地址时,实行反向拷贝
示例
//#define FIRST_DEMO
/*
* @Author: 缄默
* @Date: 2021-09-16 09:31:29
* @LastEditors: 缄默
* @LastEditTime: 2021-10-14 10:22:23
*/
#include <iostream>
#include <string.h>
using namespace std;
void coutSituation1() {
char s[] = "0123456789";
memmove(s + 1, s + 1, 3);
cout << s << endl;
char *dest = s + 1;
char *src = s + 1;
cout << "dest " << &dest << endl << "src " << &src << endl;
cout << endl << endl;
}
void coutSituatio2() {
char s[] = "0123456789";
memmove(s, s + 7, 3);
char *dest = s;
char *src = s + 7;
cout << "dest " << &dest << endl << "src " << &src << endl;
cout << s << endl;
cout << endl << endl;
}
void coutSituation3() {
char s[] = "0123456789";
memmove(s + 5, s, 3);
char *dest = s + 5;
char *src = s;
cout << "dest " << &dest << endl << "src " << &src << endl;
cout << s << endl;
cout << endl << endl;
}
int main()
{
coutSituation1();
coutSituatio2();
coutSituation3();
return 0;
}
/*output:
0123456789
dest 0x6ffdd8
src 0x6ffdd0
dest 0x6ffdd8
src 0x6ffdd0
7893456789
dest 0x6ffdd8
src 0x6ffdd0
0123401289
*/