2010年1月28日 星期四

strtok trap

strtok是C語言上常常用來切割字串的方法。典型用法大概就長得像下面一樣。

char *token = strtok(str, del);
str為來源字串,del為想要用來做分割的字元。

看到了這樣的寫法,或許就會以為,那麼str就只是單純的傳進去而不做任何改變吧?!這是錯的想法!strtok會將傳進去的字串做完分割並回傳第一個token,但也同時str也會變得跟token一模一樣。看了Microsoft實做的strtok原始碼,就可以知道他怎麼做了。

所以下次要使用的時候,若str有想要再利用的需要,請先把str先複製一份做保存吧。

參考資料:
[1] [C/C++] string使用strtok的問題
[2] (筆記) 如何使用strtok()? (C/C++) (C)

沒有留言: