[問題] 請教一個存取陣列的問題

看板C_and_CPP (C/C++)作者 (阿洵)時間16年前 (2009/03/13 15:44), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/2 (看更多)
又來麻煩各位前輩 我在練習從檔案中讀資料存進陣列時遇到一些問題 我的資料是這樣的: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

03/13 15:55, , 1F
補充:我是在UNIX下執行的
03/13 15:55, 1F

03/14 01:09, , 2F
因為都指向msg,而msg最後記的是最後一行
03/14 01:09, 2F

03/14 01:10, , 3F
char *arrop[iarr1][iarr2]; <=這行可以過喔?
03/14 01:10, 3F

03/14 01:10, , 4F
我以為這種寫法是錯的?
03/14 01:10, 4F

03/14 01:11, , 5F
strtok不會自行幫你分配記憶體
03/14 01:11, 5F

03/17 16:52, , 6F
感謝tsai前輩的指教
03/17 16:52, 6F
文章代碼(AID): #19kWxO24 (C_and_CPP)
文章代碼(AID): #19kWxO24 (C_and_CPP)