作者wansincere (阿洵)
看板C_and_CPP
標題[問題] 請教一個存取陣列的問題
時間Fri Mar 13 15:44:23 2009
又來麻煩各位前輩
我在練習從檔案中讀資料存進陣列時遇到一些問題
我的資料是這樣的:aaa,bbb
ccc,ddd,eee
最多3組最少2組
開啟檔案後
fgets(line, sizeof(line), fp); //從第一行讀總行數
iarr1 = atoi(line) - 2; //設定陣列大小,iarr2固定是2
char *arrop[iarr1][iarr2];
for(i = 0; i <= iarr1; i++){
int j = 0;
fgets(msg, 256, fp);
char *ptr = msg; int len = strlen(ptr);
if(ptr[len-1]=='\n') ptr[len-1]='\0'; //去除行尾的的換行符號
arrop[i][j] = strtok(msg,",");
while (j <= iarr2 && arrop[i][j] != NULL){
我如果在這裡printf("%s\n",arrop[i][j]);
得到的結果都是正確的,這不就代表內容確實被寫入陣列了嗎?
j++;
arrop[i][j] = strtok(NULL,",");
}
}
但是我在這裡再printf("%s %s %s\n",arrop[0][0],arrop[0][1],arrop[0][2]);
會發現內容是最後一行的資料的內容
我寫了個迴圈來看,發現陣列裡面所有值的內容都變成檔案最後一行的內容
試了好久還是搞不清楚狀況>_<
請各位前輩教我!!謝謝(鞠躬)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.31.36.137
1F:→ wansincere:補充:我是在UNIX下執行的 03/13 15:55
2F:→ tsaiminghan:因為都指向msg,而msg最後記的是最後一行 03/14 01:09
3F:→ tsaiminghan:char *arrop[iarr1][iarr2]; <=這行可以過喔? 03/14 01:10
4F:→ tsaiminghan:我以為這種寫法是錯的? 03/14 01:10
5F:→ tsaiminghan:strtok不會自行幫你分配記憶體 03/14 01:11
6F:→ wansincere:感謝tsai前輩的指教 03/17 16:52