最新高清无码专区,无人区码一码二码w358cc,99在线精品国自产拍不卡,亚洲国产欧美在线成人APP,男人天堂a在线,亚洲熟妇色,伊人毛片,国产精品亚洲mnbav网站

自寫內存操作函數 -電腦資料

電腦資料 時間:2019-01-01
【www.gz-dh.cn - 電腦資料】

    【內存操作函數】

    字符串操作函數中有一個strcpy的函數,它可以拷貝字符類型,那么有沒有不關心類型的函數呢?這個,當然是有滴,大師們早就將他們寫到庫里面了,

自寫內存操作函數

    1.memcpy() 用來復制內存,其原型為:

    void * memcpy ( void * dest, const void * src, size_t num );

    memcpy() 會復制 src 所指的內存內容的前 num 個字節到 dest 所指的內存地址上。

    memcpy() 并不關心被復制的數據類型,也就是說它可以操作任意類型,只是逐字節地進行復制,這給函數的使用帶來了很大的靈活性,可以面向任何數據類型進行復制。

    需要注意的是:

    >>1.dest 指針要分配足夠的空間,也即大于等于 num 字節的空間。如果沒有分配空間,會出現斷錯誤。

    >>2.dest 和 src 所指的內存空間不能重疊(如果發生了重疊,使用 memmove()會更加安全)。

    與 strcpy() 不同的是,memcpy() 會完整的復制 num 個字節,不會因為遇到“\0”而結束。

    【返回值】返回指向 dest 的指針。注意返回的指針類型是 void,使用時一般要進行強制類型轉換。

    【函數實現】

   

#include <stdio.h>#include <string.h>#define MAX 20void* my_memcpy(void *dest,const void *src,size_t count){     int *buf1=(int *)dest;     int *buf2=(int *)src;     int *pret=(int *)dest;     while (count--)     {          *buf1=*buf2;          buf1++;          buf2++;     }     return pret;}int main(){     int arr[MAX]={0};     int brr[5]={1,2,3,4,5};     int size=sizeof(brr)/sizeof(brr[0]);     int i=0;     my_memcpy(arr,brr,size);     for (i=0;i<MAX;i++)     {         printf("%d ",arr[i]);     }     printf("\n");     return 0;}

    結果:

   

    這個就將原數組中的0一個不漏的打印出來了,好神奇_^_^_

    有了這個函數,就解決了一部分拷貝的問題,為什么說一部分呢,接下來,聽我慢慢道來,

電腦資料

自寫內存操作函數》(http://www.gz-dh.cn)。這個時候,我有一個問題,如果我給定一個數組arr[10]={1,2,3,4,5,6,7,8,9,10};我想把它的{5,6,7,8}拷貝到{7,8,9,10}上去最后打印出數組arr結果應該是{1,2,3,4,5,6,5,6,7,8};接下來看代碼實現:

   

#include <stdio.h>void* my_memcpy(void *dest,const void *src,size_t count){     int *buf1=(int *)dest;     int *buf2=(int *)src;     int *p=(int *)dest;     while (count--)     {          *buf1=*buf2;          buf1++;          buf2++;     }     return p;}int main(){     int arr[10]={1,2,3,4,5,6,7,8,9,10};     int i=0;     my_memcpy(arr+6,arr+4,16);     for (i=0;i<10;i++)     {          printf("%d ",arr[i]);     }     printf("\n");     return 0;}

    結果:

   

    這個結果怎么和預先預測的結果不一樣呢_~~_這就是出現上面注意的第二點dest 和 src 所指的內存空間不能重疊,如果出現重疊,就會出現想不到的問題。

最新文章