[問題] strtok分割

看板C_and_CPP作者 (adios)時間15年前 (2011/01/25 15:21), 編輯推噓4(4010)
留言14則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) none 問題(Question): 為何strtok分割後 原字串會不會變 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str = strdup("scene3ifdfdfs"); char sbuf[30]={'\0'}; strcpy(sbuf,strtok(str,"scene")); printf("%s\r\n",sbuf); printf("%s\r\n",str); return 0; } 為何str印出來還是跟原本一樣 並沒有被截斷 我知道strtok第二個參數是依各字母比對 只是不知為何這程式跑出來的結果是這樣.. -- 5L36f6d6I5207573K657273206f6E62066Y697265O666f78206172U65207375636b2e -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.78.167.138 ※ 編輯: sicao 來自: 211.78.167.138 (01/25 15:22)

01/25 15:43, , 1F
原PO對strtok誤解很大
01/25 15:43, 1F

01/25 15:46, , 2F
本來就不會影響str
01/25 15:46, 2F
那為何sbuf出來的是截斷的結果??~"~ 而且如果第二個參數改成i 兩個就出現一樣的scene3 證明應該是會影響 ※ 編輯: sicao 來自: 211.78.167.138 (01/25 15:59)

01/25 16:12, , 3F
試試看 char *str = strdup("ascene3ifdfdfs");
01/25 16:12, 3F

01/25 16:20, , 4F
我推錯別理我 Orz..
01/25 16:20, 4F

01/25 16:25, , 5F

01/25 16:26, , 6F
來自規格書 7.21.5.8.2 第一次呼叫的行為, 它會切斷沒
01/25 16:26, 6F

01/25 16:27, , 7F
錯, 但是你剛好前面都是連續的 separators
01/25 16:27, 7F

01/25 16:30, , 8F

01/25 16:33, , 9F
但strcpy仍會複製到截斷的結果就是?
01/25 16:33, 9F

01/25 16:38, , 10F
前面的"scene"都被忽略, 回傳值為 '3' 的字元變數位址
01/25 16:38, 10F

01/25 16:39, , 11F
最後的 's' 有被 '\0' 蓋掉
01/25 16:39, 11F

01/25 21:45, , 12F
開頭不會切掉的意思
01/25 21:45, 12F

01/26 01:40, , 13F
結論就是一個字串當被丟進 strtok 後就當它不能用就行了
01/26 01:40, 13F

01/26 01:40, , 14F
至於是怎麼個不能用法就別管它...
01/26 01:40, 14F
文章代碼(AID): #1DFddW4J (C_and_CPP)