作者:
wtchen (沒有存在感的人)
2015-06-12 16:53:22問題(Question):
正在想一個實作問題:如何將一個長的字串char*按照分隔符號(\t)分成幾個char*
舉例:某文字檔有長字串如下:
Number (\t) First Name (\t) Last Name (\t) Points (\t) Flavor (\n)
1 (\t) Eve (\t) Jackson (\t) 94 (\t) 3.45 (\n)
2 (\t) John (\t) Doe (\t) 80 (\t) 9.21 (\n)
3 (\t) Adam (\t) Johnson (\t) 67 (\t) 4.80 (\n)
4 (\t) Jill (\t) Smith (\t) 50 (\t) 2.22 (\n)
然後我設兩個pointer, char *line 跟 char **t(sizeof(char*)*MAXITEM)
我用fgets(line,SIZE,fp);把字串一行一行載入line後,把\t跟換成\0,
再把line的\0位置address轉給t
以第1行為例:
t[0] = line, t[0] = (char*)malloc(6-0+1) -> *t[0] = "Number\0" ?
t[1] = line+7, t[1] = (char*)malloc(17-7+1) -> *t[1] = "First Name\0" ?
t[2] = line+18, t[2] = (char*)malloc(27-18+1) -> *t[2] = "Last Name\0" ?
t[3] = line+28, t[3] = (char*)malloc(34-28+1) -> *t[3] = "Point\0" ?
t[4] = line+35, t[4] = (char*)malloc(41-35+1) -> *t[4] = "Flavor\n" ?
用這種方法載入第2行,第3行後,我就能用atoi或atof把某些t[i]轉成數字。
但是我不太懂要怎麼把**t跟*line設在同一address上
還有程式跑完我要free的話,兩個adress重疊會不會出問題?
還是板友有更好的方法可以建議?
我是希望能儘可能用效率高的方法(而且是用C的語法)
希望各位能理解我想做的東西。
謝謝
作者:
lj0113 (tiny legend)
2015-06-12 20:38:002F說的對, newPtr = strtok( s1, " \n" );s1會被strtok拿去弄, 所以不可以宣告為constant string