亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

C語言 字符串的內(nèi)存拷貝處理函數(shù) -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

    對(duì)于字符串來說,我們運(yùn)用字符串中的str類別的函數(shù),但是我們還有一些關(guān)于內(nèi)存的拷貝函數(shù),

C語言 字符串的內(nèi)存拷貝處理函數(shù)

。他們操作的對(duì)象是內(nèi)存,然后可以接受任何類型的數(shù)據(jù)進(jìn)行拷貝。

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

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

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

    ,這表示他可以拷貝任意類型的數(shù)據(jù)。

    然后我們看一下實(shí)現(xiàn):

    memcpy:

   

void *my_memcpy(void *str,const void *Dstr,int count)                         //從內(nèi)存地址開始改變,并確定改變長(zhǎng)度,所以用萬能類型去接受{             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;}

    然后會(huì)出現(xiàn)一個(gè)問題,如果我們拷貝的數(shù)據(jù)中Dstr的起始位置在STR操作之間,那么在改變str時(shí)會(huì)出現(xiàn)副作用,將導(dǎo)致我們的拷貝結(jié)果不正確,所以我們應(yīng)該考慮到會(huì)覆蓋的情況,

電腦資料

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

    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;}

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

最新文章