[問題] 新手char*及scanf的問題

看板C_and_CPP (C/C++)作者 (殘缺)時間15年前 (2011/06/19 11:12), 編輯推噓8(8024)
留言32則, 9人參與, 最新討論串1/1
c++剛學一個禮拜,在寫自己的第一個程式時就遇到瓶頸了>_< 翻書及google兩天了仍不知道自己卡在哪個結, 請各位前輩給我一點提示,謝謝! 簡化後的舉例code: char* names[num_employees]; for (int n = 0; n < num_employees; n++) { scanf("%s", &names[n]); printf("%s\n", names[n]); } 會得到run-time error 程式要求使用 char* names[num_employees]; 筆記上記了,當使用char* 時,這是個pointer的array 但我還是不懂為什麼不能這樣寫? 如果不能,該怎麼寫才能讓使用者輸入的字串存儲到array之中? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 128.192.189.251

06/19 11:18, , 1F
應該宣告 char *names[num_employees][MAX_LENGTH];
06/19 11:18, 1F

06/19 11:19, , 2F
或是改用C++ string: string names[num_employees];
06/19 11:19, 2F

06/19 11:19, , 3F
然後用 cin/cout 輸入/輸出
06/19 11:19, 3F

06/19 12:03, , 4F
一樓要少個星號才對 都寫[MAX_LENGTH]了...
06/19 12:03, 4F

06/19 13:01, , 5F
謝謝一樓,但使用scanf/printf是還有char*是指定的
06/19 13:01, 5F

06/19 13:02, , 6F
所以才讓人苦惱
06/19 13:02, 6F

06/19 13:20, , 7F
那就表示你大概需要malloc / free來做動態配置....
06/19 13:20, 7F

06/19 13:21, , 8F
或者, 另外 char name_raw[num_employees][MAX_LENGTH];
06/19 13:21, 8F

06/19 13:22, , 9F
然後loop i做 names[i] = (char*)name_raw[i]; .... XD
06/19 13:22, 9F

06/19 13:23, , 10F
只是要注意不論哪一種, scanf/printf裡用的都是names[i]
06/19 13:23, 10F

06/19 13:24, , 11F
(即不應該再加上 & 取址)
06/19 13:24, 11F

06/19 14:03, , 12F
謝謝樓上,我用scanf("%s", names);結果可以run了(其他部份
06/19 14:03, 12F

06/19 14:04, , 13F
沒改),但我不了解為什麼是names而不是names[n]呢?
06/19 14:04, 13F

06/19 14:14, , 14F
您陣列中的各個元素沒有要到可用的空間
06/19 14:14, 14F

06/19 14:15, , 15F
要把讀入的東西塞到指向未知空間的 char* 會有問題
06/19 14:15, 15F

06/19 14:18, , 16F
建議設個char tmpName[256];然後scanf("%s",tmpName);接著
06/19 14:18, 16F

06/19 14:23, , 17F
再用strcpy()函式將tmpName拷貝至陣列元素中, 當然陣列中
06/19 14:23, 17F

06/19 14:23, , 18F
的元素要先配置好空間。
06/19 14:23, 18F

06/19 14:28, , 19F
你那樣改能run完全是湊巧運氣好而已....Orz
06/19 14:28, 19F

06/20 00:06, , 20F
我知道是湊巧的Q_Q所以才問為什麼 謝謝樓上回答,我今天
06/20 00:06, 20F

06/20 00:07, , 21F
繼續努力試; 請問具體一點如何是"要到可用空間"呢?
06/20 00:07, 21F

06/20 00:07, , 22F
array 那章重讀吧, 基本觀念有問題...
06/20 00:07, 22F

06/20 00:30, , 23F
http://pastie.org/2092099 這樣應該很具體了...XD
06/20 00:30, 23F

06/20 01:22, , 24F
樓上的好人卡疊起來大概已經累積的比101還要高了....XD
06/20 01:22, 24F

06/20 01:23, , 25F
.....可以換一個女朋友了嗎 XD
06/20 01:23, 25F

06/20 01:26, , 26F
不然請板大幫您放在板標上徵好了.... (大誤XDD)
06/20 01:26, 26F

06/20 02:19, , 27F
拜託不要 XDDDD
06/20 02:19, 27F

06/20 09:24, , 28F
謝謝各位前輩!也很謝謝JAMES732的細心指教:D 我也會在回去
06/20 09:24, 28F

06/20 09:25, , 29F
仔細讀懂概念的(剛學不到一個禮拜就要交程式還好順利了囧)
06/20 09:25, 29F

06/20 10:20, , 30F
剛學就交這樣的作業?跳級跳得有點多
06/20 10:20, 30F

06/20 17:58, , 31F
給VictorTom 100個讚
06/20 17:58, 31F

06/20 23:33, , 32F
^^^^^^^^^ 有馬駕駕XD 說真的是跳級跳的一點多@_@"
06/20 23:33, 32F
文章代碼(AID): #1D_MaRVf (C_and_CPP)
文章代碼(AID): #1D_MaRVf (C_and_CPP)