memmove()用於將一個內存塊從一個位置複製到另一個位置。在string.h中聲明
// Copies "numBytes" bytes from address "from" to address "to" void * memmove(void *to, const void *from, size_t numBytes);
下麵是一個示例C程序,顯示memmove()的工作。
/* A C program to demonstrate working of memmove */
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[] = "Geeks"; // Array of size 100
char str2[] = "Quiz"; // Array of size 5
puts("str1 before memmove ");
puts(str1);
/* Copies contents of str2 to sr1 */
memmove(str1, str2, sizeof(str2));
puts("\nstr1 after memmove ");
puts(str1);
return 0;
}
輸出:
str1 before memmove Geeks str1 after memmove Quiz
有什麽不同memcpy()?
memcpy()隻是簡單地將數據從一個位置一個位置複製到另一個位置。另一方麵,memmove()首先將數據複製到中間緩衝區,然後再從緩衝區複製到目標。
字符串重疊時,memcpy()會導致問題。例如考慮下麵的程序。
// Sample program to show that memcpy() can loose data.
#include <stdio.h>
#include <string.h>
int main()
{
char csrc[100] = "Geeksfor";
memcpy(csrc+5, csrc, strlen(csrc)+1);
printf("%s", csrc);
return 0;
}
輸出:
GeeksGeeksGeek
由於輸入地址重疊,因此上述程序將覆蓋原始字符串並導致數據丟失。
// Sample program to show that memmove() is better than memcpy()
// when addresses overlap.
#include <stdio.h>
#include <string.h>
int main()
{
char csrc[100] = "Geeksfor";
memmove(csrc+5, csrc, strlen(csrc)+1);
printf("%s", csrc);
return 0;
}
輸出:
GeeksGeeksfor
相關用法
注:本文由純淨天空篩選整理自 memmove() in C/C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。