噁心的C語言strtok函數

來源:互聯網
上載者:User
從C#、JAVA到C ,讓我覺得像是從公產主義社會回到了原始社會,不順手,所以很心裡憋氣!!!

函數名: 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函數,用作分割字串
它的第二個參數不能是char*的變數,是char[]的變數則沒問題
FUCK!
我做了N多次測試才發現的這個問題,害得我調試UNIX網路編程作業好長時間

這個函數的調用真是奇怪
第一次要設定參數,第二次參數竟然可以NULL
然後函數竟然能分割第一次參數設定的字元
我無語了
這樣的設計也太不人性化了

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

第二次調用該函數strtok(NULL,"."),第一個參數設定為NULL,第二個參數還是分割的依據
結果返回分割依據後面的字串,即上面的程式輸出d

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.