C/C++ memcpy函數的用法


功能

memcpy指的是c和c++使用的內存拷貝函數,memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中

頭文件

所在頭文件 <string.h>或< cstring >

函數原型

_CRTIMP int __cdecl __MINGW_NOTHROW     memcmp (const void*, const void*, size_t) __MINGW_ATTRIB_PURE;

參數含義:

  • 第一個參數:目的地址
  • 第二個參數:源地址
  • 第三個參數:所需要復制的字節數

程序用例

  • 目的地址與原地址數據寬度相同的時候
 1 int main()  2 {  3     char a[4] = "mmmm";  4     char b[7] = "123455";  5     memcpy(b,a,3);  6     printf("%d\n\r",sizeof(b));  7     printf("%s\n",b);  8     for(int i = 0; i < sizeof(b); i++)  9         printf("b[%d]的字符串是%c\n\r",i,b[i]); 10      return 0; 11 }

運行結果
在這里插入圖片描述

可以看出memcpy函數只復制需要size_t個字節數據到目的地址,目的地址size_t之后的數據並不會改變

  • 目的地址的寬度比原地址不相等時
 1 int main()  2 {  3     char a[8] = "abcdef";  4     short b[4] = {0x17,0x18,0x19,0x19};  5   //目的地址數據寬
 6     memcpy(b,a,6);  7     printf("b[0]的值是%c\n",b[0]);  8     printf("b[0]的值是%c\n",b[0]>>8);  9     printf("b[1]的值是%x\n",b[1]); 10     printf("b[2]的值是%x\n",b[2]); 11     printf("b[3]的值是%x\n",b[3]); 12      return 0; 13 }

運行結果
在這里插入圖片描述
可以看到原始數據先復制到低位,再復制到高位,感覺這個可能跟數據的存儲大端小端有關系,在CCS上測試了也是這樣的效果。

  • 目的地址的寬度比原地址的寬度小
 1 int main()  2 {  3   //源地址數據寬
 4     short c[5] = {0x1234,0x5678,0x2345,0x3390};  5     char  d[10] = {0};  6     memcpy(d,c,6);  7     for(int i = 0; i < sizeof(d); i++)  8         printf("d[%d]的值是%x\n\r",i,d[i]);  9      return 0; 10 }

運行結果
在這里插入圖片描述
先復制的是低位,再復制的是高位。
-復制之后再還原

 1 int main()  2 {  3    char a[8] = "abcdef";  4     short b[4] = {0x17,0x18,0x19,0x19};  5     memcpy(b,a,6);  6     char  d[10] = {0};  7     memcpy(d,b,6);  8     for(int i = 0; i < sizeof(d); i++)  9         printf("d[%d]的值是%x\n\r",i,d[i]); 10     return 0; 11 }

運行結果
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM