Re: [問題] 有關C語言讀檔案與切割

作者: adrianshum (Alien)   2013-07-29 05:49:28
※ 引述《roadeat (www)》之銘言:
: 各位前輩您好:
:   一個讀取csv檔的小程式,將檔案中的字串與數字分開,數字的部分OK,但字串的部分
: 一直被最後一筆覆蓋,苦找不出原因,煩請解惑。
[43]
: C部分程式:
: typedef struct{
: char *name;//存字串
: float x;//存數字
: }node;
[43]
: char read[15];
[43]
: fscanf(fp,"%s",&read);
[43]
: if (count++==0) all[nc].name=token;//count=0 存字串name
: //count=1 存數字x
[43]
: 後面列印all[].x都是正確的,但是all[].name的部分都是最後一筆,試了很久
: 找不到適當的方法改善,不知是否有人可解惑,感謝。
原因很簡單,你一直都用同樣的 char array 來讀東西及做 strtok.
strtok 本來就是會修改做 strtok 的 str, 然後直接 return 該 str
裡的address. e.g.
strtok 處理 "abc,def" 的時候會做的是:
原 str 在 memory 裡的樣子:
[ a ][ b ][ c ][ , ][ d ][ e ][ f ][\0 ]
strtok 取第一個 token 後
[ a ][ b ][ c ][\0 ][ d ][ e ][ f ][\0 ]
^
把 token 換成\0 然後 return ^ 那個位置的 address
由於你一直讀都是用同一個 buffer, 而在 node 裡也只是
用 char*, 每個 node 的 name 其實都在指向你的 buffer
裡的開頭,當然最後每一個 node 都會看到最後一行的 name
要解決也很簡單,其中一個方法就是 node 裡不要用 char*,
用 char array 然後做 strcpy 就 ok 了 :)

Links booklink

Contact Us: admin [ a t ] ucptt.com