strtok函數(shù)會(huì)破壞被分解字符串的完整,調(diào)用前和調(diào)用后的s已經(jīng)不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。
山丹ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
strtok是一個(gè)線程不安全的函數(shù),因?yàn)樗褂昧遂o態(tài)分配的空間來存儲(chǔ)被分割的字符串位置
線程安全的函數(shù)叫strtok_r,ca。
運(yùn)用strtok來判斷ip或者mac的時(shí)候務(wù)必要先用其他的方法判斷'.'或':'的個(gè)數(shù),因?yàn)橛胹trtok截?cái)嗟脑?,比如?192..168.0...8..."這個(gè)字符串,strtok只會(huì)截取四次,中間的...無論多少都會(huì)被當(dāng)作一個(gè)key。
函數(shù)strtok保存string中標(biāo)記后面的下一個(gè)字符的指針,并返回當(dāng)前標(biāo)記的指針。
后面再調(diào)用strtok時(shí),第一個(gè)參數(shù)為NULL,繼續(xù)將string標(biāo)記化。NULL參數(shù)表示調(diào)用strtok繼續(xù)從string中上次調(diào)用 strtok時(shí)保存的位置開始標(biāo)記化。
如果調(diào)用strtok時(shí)已經(jīng)沒有標(biāo)記,則strtok返回NULL。注意strtok修改輸入字符串,因此,如果調(diào)用strtok之后還要在程序中使用這個(gè)字符串,則應(yīng)復(fù)制這個(gè)字 符串。
strtok()函數(shù)并不像你想的那樣可以一次切割字串。需要多次循環(huán),第二次時(shí)需要用 p = strtok(NULL, " "); 這樣的 形式。
void main()
{ char test1[] = "Hello C World";
char *p;
p = strtok(test1, " ");
while(p)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
運(yùn)行結(jié)果:
Hello
C
World
char *___strtok;//關(guān)鍵這個(gè)全局指針變量
char * strtok(char * s,const char * ct)
{
char *sbegin, *send;
sbegin = s ? s : ___strtok;//不等于NULL用原始字符串,否則用___strtok
if (!sbegin) {
return NULL;//結(jié)尾
}
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);
}
這個(gè)是strtok函數(shù)原型.你可以參考一下
原型:extern char *strtok(char *s, char *delim);
用法:#include string.h
功能:分解字符串為一組標(biāo)記串。s為要分解的字符串,delim為分隔符字符串。
說明:首次調(diào)用時(shí),s必須指向要分解的字符串,隨后調(diào)用要把s設(shè)成NULL。
strtok在s中查找包含在delim中的字符并用NULL('\0')來替換,直到找遍整個(gè)字符串。
返回指向下一個(gè)標(biāo)記串。當(dāng)沒有標(biāo)記串時(shí)則返回空字符NULL。
舉例:
// strtok.c
#include syslib.h
#include string.h
#include stdio.h
main()
{
char *s="Golden Global View";
char *d=" ";
char *p;
clrscr();
p=strtok(s,d);
while(p)
{
printf("%s\n",s);
strtok(NULL,d);
}
getchar();
return 0;
}
相關(guān)函數(shù):strcspn,strpbrk