作者tinlans ( )
看板C_and_CPP
標題Re: [問題] C++ string 與 C char* 使用strtok的問題
時間Tue Mar 2 23:56:44 2010
※ 引述《Aligu1009 (=.=)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 2. 第18行的strtok()回傳NULL時,轉型為string的動作會產生 run time error
"" 跟 NULL 可說是天差地遠的兩種東西。
以 0 為起始位址的 string 怎麼看都是有問題的,
就算不丟 exception 也幾乎都會 segmentation fault。
就算是在沒有 OS 的環境下這種機率也是微乎其微,
所以你還是乖乖寫判斷吧。
而且你表面上看起來那叫轉型,
但實際上是建構物件的動作。
並不像你定義一個 int 型別的變數 i,
然後寫 (double)i 可以假設程式絕對不會當掉這麼簡單。
: 1. 請問 line 9 和 lin 10的寫法為什麼會對第14行的 strtok產生不同的效果?
第九行的字串型別應該是 const char * 而不是 char *,
strtok() 的第一個參數要求是 char *,
這個函式會修改字串的內容所以不能是 const char *。
: 2. 當strtok回傳NULL時該怎麼assign給word呢?
: 我知道可以用if else 先判斷strtok的回傳值再決定要assign什麼給word
: 但這種寫法似乎 "比較髒",總覺得應該有漂亮一點的寫法
: 不知道各位是怎麼做的呢? 謝謝
你就是只能這樣寫 if else,
反正 C-style string 跟 C++ string 混用就已經很髒了,
加上你還有 C-style casting,
相較之下這個 if else 也沒多髒。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.106.249
※ 編輯: tinlans 來自: 118.160.106.249 (03/03 00:08)
推 loveme00835:我是有看過一本教 C語言的書, I/O都用cin, cout, 有 03/03 00:40
→ loveme00835:的學校本身就是混著教, 如果加上學生沒有多翻參考書.. 03/03 00:41
推 chchwy:推一下本來就很髒了XDDD 03/03 00:45