memcpy復制整型數組相關


————————————————分割線————————————————

分割線以內的博客轉載自:https://blog.csdn.net/qq_38993096/article/details/88377285,侵刪

C語言:#include<string.h>
C++:#include
void *memcpy(void *dest, const void *src, size_t n);
從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中,是用指針進行操作的。
注意:
1.strcpy提供了字符串的復制。即strcpy只用於字符串復制,並且它不僅復制字符串內容之外,還會復制字符串的結束符。
2.memcpy提供了一般內存的復制。即memcpy對於需要復制的內容沒有限制,因此用途更廣。

strcpy和memcpy主要有以下3方面的區別:
1、復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2、復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
3、用途不同。通常在復制字符串時用strcpy,而需要復制其他類型數據時則一般用memcpy
————————————————
版權聲明:本文為CSDN博主「fjghgsrfdhbrs」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38993096/java/article/details/88377285

memcpy(d,s+12,4);//從第13個字符(V)開始復制,連續復制4個字符(View)到s
d[4]='\0';//必須有這句,不然字符串會亂碼
//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可

函數源碼:

void *memcpy(void *dest, const void *src, int count)
{
    void *ptr = dest;
    if (NULL == dest || NULL == src || count <= 0)
    {
        return NULL;
    }
    while (count--)
    *(char *)dest++ = *(char *)src++;
    return ptr;
}

————————————————分割線————————————————

 

補充整型數組復制相關:

整型數組復制的時候,第三個參數應該為sizeof(int) * size    (同理會有sizeof(long int) * size, sizeof(Node) * size...)

在memcpy的源碼中可以看到,復制是以char為地址單元進行的,所以第三個參數只傳進size的話,那么將會只復制前size個char地址單元的數據。

int main()
{
    int a[4] = {1, 2, 3, 100};
    int b[3] = {4, 5, 6};
    memcpy(b, a, 4); // 通常int = 4 * char, 所以復制的結果為b = {1, 5, 6}, 只復制了前4個char地址的內容
    memcpy(b, a, sizeof(int) * 3); // 這里的sizeof(int) * 3 == 12, 所以復制結果為b = {1, 2, 3};
    for (int i = 0; i < 3; i++) {
        printf("%d ", b[i]);
    }
    return 0;
}

 


免責聲明!

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



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