• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            惡心的C語言strtok函數(shù)

            Posted on 2010-02-08 09:54 Prayer 閱讀(1322) 評論(3)  編輯 收藏 引用 所屬分類: C/C++
            從C#、JAVA到C ,讓我覺得像是從公產(chǎn)主義社會回到了原始社會,不順手,所以很心里憋氣!!!

            函數(shù)名: strtok 
            功  能: 查找由在第二個串中指定的分界符分隔開的單詞 
            用  法: 
            char *strtok(char *str1, char *str2); 
            程序例: 

            #include 
            <string.h> 
            #include 
            <stdio.h> 

            int main(void

               
            char input[16= "abc,d"
               
            char *p; 

               
            /* strtok places a NULL terminator 
               in front of the token, if found 
            */
             
               p 
            = strtok(input, ","); 
               
            if (p)   printf("%s\n", p); 

               
            /* A second call to strtok using a NULL 
               as the first parameter returns a pointer 
               to the character following the token  
            */
             
               p 
            = strtok(NULL, ","); 
               
            if (p)   printf("%s\n", p); 
               
            return 0
            }
             
            下面是惡心的strtok函數(shù),用作分割字符串
            它的第二個參數(shù)不能是char*的變量,是char[]的變量則沒問題
            FUCK!
            我做了N多次測試才發(fā)現(xiàn)的這個問題,害得我調(diào)試UNIX網(wǎng)絡編程作業(yè)好長時間

            這個函數(shù)的調(diào)用真是奇怪
            第一次要設定參數(shù),第二次參數(shù)竟然可以NULL
            然后函數(shù)竟然能分割第一次參數(shù)設置的字符
            我無語了
            這樣的設計也太不人性化了


            下面認真的說一下這個函數(shù),如有哪個和我一樣郁悶的人發(fā)現(xiàn)這篇文章,或許能少走些彎路
            函數(shù)第一次調(diào)用需設置兩個參數(shù),strtok(str,",") str 需要分割的串 “,”根據(jù),分割
            第一次分割的結果,返回串中第一個,之前的字串,也就是上面的程序第一次輸出abc

            第二次調(diào)用該函數(shù)strtok(NULL,"."),第一個參數(shù)設置為NULL,第二個參數(shù)還是分割的依據(jù)
            結果返回分割依據(jù)后面的字串,即上面的程序輸出d


            Feedback

            # re: 惡心的C語言strtok函數(shù)  回復  更多評論   

            2010-02-08 13:15 by 陳梓瀚(vczh)
            我的話,一直都是自己寫的,strtok沒法用。

            # re: 惡心的C語言strtok函數(shù)  回復  更多評論   

            2010-02-08 13:17 by 陳梓瀚(vczh)
            不過你要理解,strtok就是一個IEnumerable<string>,才做成這樣子的。

            # re: 惡心的C語言strtok函數(shù)  回復  更多評論   

            2010-07-05 12:42 by 仁者無敵
            剛開始比較有同感,感覺不好理解,如果按照Java或C#集合觀點,應該返回一個string的集合對象。然后可以通過循環(huán)打印出分隔的結果。

            不過在C/C++中,由于有指針優(yōu)勢,所以直接用指針的偏移來表示。
            對于兩次的調(diào)用不一致,我是這樣理解的:通常對于分隔的字符串,一次是不能處理完的,等到第二次,由于本身字符串并沒有處理完,這樣不能載入新的字符串,所以必須使用NULL來表示并不需要處理新的字符串,程序繼續(xù)執(zhí)行上次未處理完的字符串。

            我覺得,如果這個函數(shù)參數(shù)列表兩個參數(shù)的位置換一下,然后將將NULL作為第二個參數(shù)的默認值就好了,那樣第二次調(diào)用時,直接strtok(",")。這樣避免了莫名多出來NULL。
            国产成人久久精品区一区二区| 久久精品免费观看| 久久精品无码一区二区WWW| 女人高潮久久久叫人喷水| 2021国产精品午夜久久| 久久免费的精品国产V∧| 国产成人久久精品麻豆一区 | 亚洲精品蜜桃久久久久久| 2021精品国产综合久久| 色天使久久综合网天天| 国产午夜久久影院| 久久亚洲日韩看片无码| 久久99精品九九九久久婷婷| 久久亚洲私人国产精品vA| 欧美性猛交xxxx免费看久久久| 久久大香香蕉国产| 一本久道久久综合狠狠爱| 久久99精品免费一区二区| 潮喷大喷水系列无码久久精品| 久久亚洲精品无码VA大香大香| 99久久婷婷国产综合精品草原| 久久久精品人妻一区二区三区四 | 无码日韩人妻精品久久蜜桃| 久久露脸国产精品| 久久久久久国产a免费观看不卡| 久久久久免费精品国产| 精品熟女少妇av免费久久| 欧美一区二区三区久久综| 久久狠狠爱亚洲综合影院| 久久久久久久久久久久久久| 久久伊人五月天论坛| 久久久久久青草大香综合精品| A级毛片无码久久精品免费| 青青热久久综合网伊人| www.久久热.com| 99精品久久久久久久婷婷| 国产成人精品久久亚洲高清不卡 | 久久亚洲精品国产亚洲老地址| 久久久久亚洲精品天堂久久久久久| 精品久久久久一区二区三区| 99久久国产免费福利|