函數(shù)原型:char *strtok(char *s, char *delim); 函數(shù)使用說(shuō): 1.strtok函數(shù)的實(shí)質(zhì)上的處理是,strtok在s中查找包含在delim中的字符并用NULL(’\0′)來(lái)替換,直到找遍整個(gè)字符串。這句話有兩層含義:(1)每次調(diào)用strtok函數(shù)只能獲得一個(gè)分割單位。(2)要獲得所有的分割單元必須反復(fù)調(diào)用strtok函數(shù)。 2.strtok函數(shù)以后的調(diào)用時(shí)的需用NULL來(lái)替換s. 3.形參s(要分割的字符串)對(duì)應(yīng)的變量應(yīng)用char s[]=”….”形式,而不能用char *s=”….”形式。
例子如下:
其結(jié)果為: Golden 但是如果我們把char buf[]=”Golden Global View”;換成char *buf=”Golden Global View”; 則會(huì)出錯(cuò),原因我還沒(méi)找到,如果有人發(fā)現(xiàn)了原因望告知于我。 如果我們把token = strtok( NULL, ” “);換成token = strtok( buf, ” “);則while循環(huán)會(huì)成為一個(gè)無(wú)限循環(huán),而輸出的結(jié)果就只為:Golden。我的解釋原因如下: 在strtok函數(shù)體中有一個(gè)char 類型的指針(假設(shè)為 char *p),它的作用就是令p=s,用于保存s的起始地址。由于在隨后的處理中指針p的值會(huì)一直保存(C語(yǔ)言中指針的特點(diǎn)),因此在以后的strtok調(diào)用中用NULL來(lái)代替s的原因就是防止p被重新賦值而指向s的起始地址,從而可以保證p可以指向s的其他位置,直到最后分割完整個(gè)字符串。 但是如果用s來(lái)代替NULL,那么每次調(diào)用strtok時(shí),p就會(huì)指向s的初始地址,從而只能獲得第一個(gè)分割出來(lái)的字串,如上面的例子中while會(huì)是一個(gè)無(wú)限循環(huán),而輸出的結(jié)果只能是“Golden”。 |
|