楼主:
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