<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    C函數Strtok,,,,,strcpy詳解

    用途:在s中找出以ct中的字符為分隔的字符串,即是源串中除去了含有分隔串中的所有字符后余下的一段段的字符串,每調用一次找到一串,找不到則返回空串。第一次調用必須傳給它有效的字符串,第二次傳NULL就可以了,每次調用返回找到的子串的時候都會把源串中該子串的尾部字符(原來是搜索串中的某一字符)修改成'/0'字符返回值為每次調用得到的字串。

        下面看一下它的使用

        char sbody[]= "Presetptz/r/nPreset1=hello/r/nPreset2=ttttt/r/nend/r/n";

        ///char *pbody= "Presetptz/r/nPreset1=hello/r/nPreset2=ttttt/r/nend/r/n";//errror

        char except[] = "12/r/n";

        char *ptoken = NULL;

        ptoken = strtok(sbody,except);

        while(NULL!=ptoken)

        {

        printf("%s/n",ptoken);

        ptoken = strtok(NULL,except);

        }

        輸出為:

        Presetptz

        Preset

        =hello

        Preset

        =ttttt

        end

    下面我們看一下它的源碼:

        char *___strtok;//關鍵這個全局指針變量

        char * strtok(char * s,const char * ct)

        {

        char *sbegin, *send;

        sbegin  = s ? s : ___strtok;//不等于NULL用原始字符串,否則用___strtok

        if (!sbegin) {

        return NULL;//結尾

        }

        sbegin += strspn(sbegin,ct);//

        if (*sbegin == '/0') {

        ___strtok = NULL;

        return( NULL );

        }

        send = strpbrk( sbegin, ct);

        if (send && *send != '/0')

        *send++ = '/0';

        ___strtok = send;

        return (sbegin);

        }

        其中:  ssize_t strspn(const char* s,char*accept)// 返回accept中任一字符在s中第一次出現的位置

        char * strpbrk(const char * cs,const char * ct)//返回指向ct中任一字符在cs中第一次出現的位置

        這個函數不難分析,___strtok指針指向除去第一個有效字串后面的位置,到這里我們應該清楚為什么第二次調用時只要傳NULL就可以了,當然這里也暴露了它的缺點,就是說不能有兩個線程同時使用strtok否則就會出現錯誤。還有就是我在使用這個函數時碰到的問題,如上面的代碼如果我把sbody換成 pbody,則編譯沒有問題,運行時就會出錯,為什么?還是自己的基本功不扎實,pbody在是個靜態字符串,說白了,它是在編譯時就已經賦值而且相當于是一個const常量,不能被修改,而strtok是需要修改字符串的,所以產生問題不足為奇。



     原型聲明:extern char *strcpy(char *dest,const char *src);

      頭文件:string.h
      功能:把從src地址開始且含有NULL結束符的字符串賦值到以dest開始的地址空間
      說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
      返回指向dest的指針

     

    posted on 2012-06-29 12:53 順其自然EVO 閱讀(571) 評論(0)  編輯  收藏 所屬分類: 性能測試

    <2012年6月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费无码又爽又高潮视频| 99久久99久久免费精品小说| 韩国二级毛片免费播放| 久久精品亚洲AV久久久无码| 亚洲人成免费网站| 亚洲成人高清在线观看| 精品一区二区三区无码免费视频 | 国产传媒在线观看视频免费观看| 亚洲色偷偷综合亚洲av78| 国产美女精品视频免费观看| 黄色毛片视频免费| 在线亚洲97se亚洲综合在线| 成全视频免费观看在线看| 亚洲av激情无码专区在线播放| 67pao强力打造国产免费| 亚洲一区二区三区无码国产| 中文字幕无码成人免费视频| 亚洲色大成网站www| 一本色道久久88亚洲综合| 永久免费无码日韩视频| 亚洲AV无码成人精品区在线观看 | 华人在线精品免费观看| 久久精品国产亚洲av四虎| 最近免费中文字幕高清大全| 亚洲乱码中文字幕小综合| 日韩免费视频在线观看| av片在线观看永久免费| 亚洲午夜久久久精品影院| 噼里啪啦电影在线观看免费高清| 羞羞网站免费观看| 久久久久久久尹人综合网亚洲| 亚洲视频免费播放| 国产精品亚洲专区一区| 亚洲成AV人片在线观看无| 扒开双腿猛进入爽爽免费视频 | 亚洲国产激情在线一区| 亚洲av高清在线观看一区二区 | 免费的一级片网站| 成人免费夜片在线观看| 亚洲国产人成在线观看69网站| 成人毛片免费在线观看|