字串庫函數memmove的原始碼

來源:互聯網
上載者:User

這幾個函數中,最難的要數memmove這個函數了。memmove的原型是memmove(void *dst,void *src,int count)。因為這個函數需要考慮到dst和src都是指向同一個字串中不同位置的問題。所以在這裡需要對於這種情況作出判別。

具體注釋見原始碼:

#include stdio.h>#include string.h>void *memmove(void *dest,const void *src,size_t count){    void *ret=dest;    if(dest == NULL || src == NULL)        return;    //這裡來判別dest和src是否是指向同一字串中不同位置,    //如果是指向同一字串,但是dest在src前面,則可以從前往後逐個賦值    //如果是指向同一字串,但是dest在src後面,且dest>=src+count,那麼仍然從前往後賦值    if(destsrc||dest>=src+count)    {        while(count--)            *dest++=*src++;    }    //如果是指向同一字串,但是dest在src後面,且dest    else    {        dest+=count-1;        src+=count-1;        while(count--)            *dest--=*src--;    }    return ret;}int main(){    char s[]="Golden Global View";/*        //這個用來測試dest在src的前面    memmove(s,s+7,strlen(s)-7);    s[strlen(s)-7]=0;    printf("%s",s);        printf("/n/n");*/    //這個用來測試dest在src的後面,但是dest    memmove(s+7,s,strlen(s)-7);    s[strlen(s)-7]=0;    printf("%s",s);    getchar();    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.