C語言 字符串的內存拷貝處理函數 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.solarmaxlimited.com - 電腦資料】

    對于字符串來說,我們運用字符串中的str類別的函數,但是我們還有一些關于內存的拷貝函數,

C語言 字符串的內存拷貝處理函數

。他們操作的對象是內存,然后可以接受任何類型的數據進行拷貝。

    這個是里面的memcpy,然后我們一起查看一下MSDN看一看他的原型:

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

    與strcpy不同的就是添加了第三個參數,確定操作的字節數,然后參數類型還有返回類型都是void*

    ,這表示他可以拷貝任意類型的數據。

    然后我們看一下實現:

    memcpy:

   

void *my_memcpy(void *str,const void *Dstr,int count)                         //從內存地址開始改變,并確定改變長度,所以用萬能類型去接受{             char *pstr = (char *)str;             char *pDstr = (char *)Dstr;            assert((str!=NULL) && (Dstr != NULL));             if(str == Dstr)                                         //位置相同情況下直接返回需要改變的                         return (char *)Dstr;             while(count-- > 0)            {                        *pstr++ = *pDstr++;            }             return str;}

    然后會出現一個問題,如果我們拷貝的數據中Dstr的起始位置在STR操作之間,那么在改變str時會出現副作用,將導致我們的拷貝結果不正確,所以我們應該考慮到會覆蓋的情況,

電腦資料

C語言 字符串的內存拷貝處理函數》(http://www.solarmaxlimited.com)。在函數庫中有一個memmove函數。

    memmove:

   

void *my_memmove(void *pst,const void *Dpst,int size){                       void *p = pst;             char *pstA = (char *)pst;             char *pstB = (char *)Dpst;            assert((pst != NULL) &&(Dpst != NULL));             if(pstB<pstA< pstB+size)            {                                     while(size--)                        {                                    *(pstA+size) = *(pstB+size);                        }            }             else            {                         while(size--)                        {                                    *pstA++ = *pstB++;                        }            }             return p;}

    就是遇到被拷貝的空間起始處在拷貝空間中,將會遇到拷貝內存覆蓋的現象。在這種情況下我們將考慮從尾部進行拷貝。所以進行了判斷。

最新文章
国产v亚洲v天堂无码网站,综合亚洲欧美日韩一区二区,精品一级毛片A久久久久,欧美一级待黄大片视频
亚洲国产首页在线播放 | 亚洲欧美激情在线一区 | 欧美v亚洲v中文v日韩v专区 | 婷婷国产精品久久久久精 | 色一伦一情一区二区三区 | 亚洲欧美制服在线 |