如何將輸入的數個字串存入指標陣列中? - 藍色小舖

文章推薦指數: 80 %
投票人數:10人

我(初學者)想將輸入的字串分別存入陣列中, 但是產生的結果不正確。

請各位大大幫忙... 以下是小弟寫的一小段程式 int main(void) { char str[14]; 台灣最大程式設計社群網站 ∣免費加入會員∣登入 ∣回首頁∣ 您好 線上人數 1095   會員總數:246707 討論主題:190127 討論區 程式下載/上傳 科技新聞 專欄文章 會員中心 加值服務 外包接案 求職求才 登入 登出 歡迎您免費加入會員 討論區選單 開發工具 行動裝置開發 資料庫 多媒體/網管 綜合 文章區 討論區列表>>C/C++>>如何將輸入的數個字串存入指標陣列中? []   [我要回覆] 1 如何將輸入的數個字串存入指標陣列中? 價值:40QP  點閱數:18857回應數:7 樓主 cary 0 1 24 3 發送站內信 各位大大好...我(初學者)想將輸入的字串分別存入陣列中,但是產生的結果不正確。

請各位大大幫忙...以下是小弟寫的一小段程式intmain(void){ charstr[14]; inti=0; char*pStr[14]; for(i=0;i<3;i++)/*自行輸入字串迴圈次數*/ { scanf("%s",&str); *(pStr+i)=str; } for(i=0;i<3;i++)/*列出剛剛輸入字串的結果*/ { printf("String[%d]=%s\n",i,*(pStr+i)); } system("PAUSE"); return0;}這段程式假如我輸入字串分別為:str1;str2;str3結果最後列印出來的結果為:String[0]=str3String[1]=str3String[2]=str3為何無法正確取得其中的值...我想要的是:String[0]=str1String[1]=str2String[2]=str3請求各位大大幫忙解答...小弟感激不敬 搜尋相關Tags的文章: [C語言],[字串存取], 本篇文章發表於2006-11-2411:34 1樓 回應 Sleepyhead 原因是三次輸入共用了同一個buffer(變數str),而*(pStr+i)=str;只會拷貝輸入字串buffer的指標而不是內容,所以最後三個字串指標都指到同一個buffer了。

修改如下,請參考: intmain(void) { char*str; inti=0; char*pStr[14]; for(i=0;i<3;i++)/*自行輸入字串迴圈次數*/ { str=newchar[14]; scanf("%s",str); *(pStr+i)=str; } for(i=0;i<3;i++)/*列出剛剛輸入字串的結果*/ { printf("String[%d]=%s\n",i,*(pStr+i)); } system("PAUSE"); return0; } 本篇文章回覆於2006-11-2412:05 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 2樓 作者回應 cary 謝謝Sleepyhead大大但是我加入str=newchar[14];編譯程式會錯(環境為Dev-C++使用C語言撰寫的):`new'undeclared(firstuseinthisfunction)===>語法錯誤訊息(Eachundeclaredidentifierisreportedonlyonceforeachfunctionitappearsin.)syntaxerrorbefore"char"是否哪裡需要修正的...再次麻煩各位大大協助...謝謝. 本篇文章回覆於2006-11-2413:23 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 3樓 回應 Sleepyhead 如果寫法不是C++的話,請改str=newchar[14];為str=(char*)malloc(14*sizeof(char)); 本篇文章回覆於2006-11-2413:29 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 4樓 作者回應 cary 感謝"Sleepyhead"大大的指導教學!~~~使用動態記憶體配置感謝...^^ 本篇文章回覆於2006-11-2414:11 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 5樓 回應 wei 用2維陣列也是可以做成您要的效果~~可以參考看看~~ #include intmain(void) { charstr[3][14]; inti=0; char*pStr[14]; for(i=0;i<3;i++)/*自行輸入字串迴圈次數*/ { printf("請輸入第%d個字串:",i+1); scanf("%s",str[i]); pStr[i]=str[i]; } for(i=0;i<3;i++)/*列出剛剛輸入字串的結果*/ { printf("String[%d]=%s\n",i,pStr[i]); } return0; } 下面是輸出結果:請輸入第1個字串:abc請輸入第2個字串:def請輸入第3個字串:ghiString[0]=abcString[1]=defString[2]=ghiPressanykeytocontinue 本篇文章回覆於2006-11-2414:12 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 6樓 作者回應 cary 謝謝各位大大的回覆...目前測試雙重指標之動態配置記憶體位址... 本篇文章回覆於2006-11-2415:33 ==簽名檔== --未登入的會員無法查看對方簽名檔-- 7樓 回應 阿威 intmain(intargc,char*argv[]) { int*ptrInput; intstring[255][255]={0}; intcounter=0; inti=0; while(1){ printf("Inputastring:"); scanf("%s",ptrInput); strcpy((char*)string[counter],(char*)ptrInput); for(i=0;i<=counter;i++) printf("string[%d]:%s\n",i,string[i]); printf("===================================\n"); if((strcmp((char*)string[counter],(char*)"Exit"))==0) break; else counter++; } system("PAUSE"); return0; } 提供一個用指標的方法,輸入後會將字串存至string雙陣列並列印出來,參考看看,輸入Exit即可離開^^ 本篇文章回覆於2006-11-2815:40 ==簽名檔== --未登入的會員無法查看對方簽名檔--     1 回覆 如要回應,請先登入. |網站導覽|網站介紹|4P點數說明|電子報|小舖活動|大事紀|廣告刊登|常見問題|聯絡我們|  版權所有©copyright2000AllRightsReserved



請為這篇文章評分?