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

看板Programming作者 (Alien)時間12年前 (2013/07/29 05:49), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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 了 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.19.42.175

08/24 13:16, , 1F
感謝您,我來試試看
08/24 13:16, 1F
文章代碼(AID): #1HzP7hPD (Programming)
討論串 (同標題文章)
文章代碼(AID): #1HzP7hPD (Programming)