作者corrupt003 (QQ)
看板C_and_CPP
標題Re: [問題] strtok的問題
時間Fri May 1 14:27:10 2009
※ 引述《Schematic (唸書電動網拍)》之銘言:
: 最近在測試strtok的功能,發現有個疑問
: 程式碼:
: char s[] = "This is a string";
: char *tmp;
: tmp = strtok(s, "T");
: 疑問的地方:
: strtok會記錄字串分割起頭為 &s[0],
: 然後把分界字元改成\0,
: 因此這個字串應該變成了"\0his is a string"
: 分割起頭位置改為 &s[1],
: 並且會把上次分割起頭的位址傳給tmp,
: 我的疑問是為什麼tmp在分割後的值不是"\0",
: 而是"his is a string"呢?
: 謝謝~
最近剛好在Linux 上用到此函式
查了一下man page
http://linux.die.net/man/3/strtok
char *strtok(char *str, const char *delim);
大意是說
strtok 會因為你給定的delim
把string parse 成多個token
就把它當成會以delim做分割
把string分成許多子字串
我好像沒有看到會補\0...
照你寫的來看
你以T當成delim
所以整個字串 This is a string
只會分成一個子字串 his is a string
所以temp 就自然是 his is a string了
要是你把delim 改成 "i"
你執行strtok一次後
tmep 就是 "Th" 了
以上不知有沒有說錯
我用的結果是這樣
希望對你有幫助
--
1F:→ bluewinds:我在香港迪士尼有遇到邱淑貞 和她坐同艘船~搞到最後 我11/02 21:11
2F:推 FackPtt: 就射出來了11/02 21:12
3F:→ bluewinds:們都在看她 沒有人聽解說人員講話~~她本人人超好~~一聽11/02 21:12
4F:推 ZBeta: 就射出來了11/02 21:13
5F:→ bluewinds:到我們是台灣來的 就很開心的和我們合照~~後來去廁所又11/02 21:12
6F:→ sephen: 射出來了11/02 21:13
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.12.217
7F:→ uest:它回傳的是一個C string,當然會補'\0',link裡面也有提到... 05/02 12:59
8F:→ weiyucsie:照該網頁的說明 字串開頭結尾的分割字元會被忽略 05/02 15:22
9F:→ weiyucsie:應該是原來要問的解答 05/02 15:23
10F:推 Schematic:wei大的意思是說如果分割字元是字串開頭,回傳的是後面 05/02 21:42
11F:→ Schematic:剩餘的字串,不然就回傳分割字元之前的字串嗎? 05/02 21:42
12F:→ weiyucsie:我只是照著網頁說明寫出來而已 05/14 13:24