关于memcpy()源地址和目的地址内存区域覆盖问题
void *memcpy(void *dest, const void *src, size_t n);
看注释:
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。?
但是我现在运行的一个程序在visual studio也可以运行出结果,没任何Warning和Error
大神怎么解释?
int main()
{
char str[5]="abcd";
? memcpy(str,&str[1],sizeof(str) - 1);
? printf("%s",str);
system("pause");
return 0;
}
bcd请按任意键继续. . .
[解决办法]
memcpy()会自己调整复制的方向.不会出现你说的错误 ,
[解决办法]
错误的使用方式 并不总出现错误.
按照你所说的需求你需要调用的是memmove
[解决办法]
用这个代码, 编译 Release 版本就能看到区别了:
void copy(){ char str[]="abcdefghijklmn"; memcpy(&str[1],&str,sizeof(str) - 2); printf("%s\n",str);}void move(){ char str[]="abcdefghijklmn"; memmove(&str[1],&str,sizeof(str) - 2); printf("%s\n",str);}int main(){ copy(); move(); system("pause"); return 0;}
[解决办法]
你确定当两个地址是一样的时候这函数会工作,而不是直接return ???
[解决办法]