[問題] 練習stack結構 資料顯示問題

看板C_and_CPP作者 (前方黃昏)時間5年前 (2018/08/14 13:46), 5年前編輯推噓0(006)
留言6則, 3人參與, 5年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) WIN XP 問題(Question): 分別 手動加入元素 item0~3 以及for迴圈 自動加入元素到stack 用for迴圈加入的元素 感覺怪異 不知道哪邊想錯了 預期的正確結果(Expected Output): item=test0 item=test1 item=test2 item=test3 item=test4 item=test5 item=test6 item=test7 s1.length=7 test0 test1 test2 test3 test4 test5 test6 test7 錯誤結果(Wrong Output): item=test0 item=test1 item=test2 item=test3 item=test4 item=test5 item=test6 item=test7 s1.length=7 test0 test1 test2 test3 test7 test7 test7 test7 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) 完整程式 https://pastebin.com/sHABbnTi 部份程式 void Push(StackADT *S,element item) { if(isFull(S)) printf("stack is full \n"); else { printf("item=%s\n",item); S->stack[++(S->length)]=item; } } int main() { //初始化STACK StackADT s1; s1.length=-1; //手動加入stack元素 element item0; item0.data="test0"; Push(&s1,item0); element item1; item1.data="test1"; Push(&s1,item1); element item2; item2.data="test2"; Push(&s1,item2); element item3; item3.data="test3"; Push(&s1,item3); //自動加入stack元素 int j; for(j=4;j<8;j++) { element item; char buf[10]; sprintf(buf,"test%d",j); item.data=buf; Push(&s1,item); } //顯示stack目前長度 printf("s1.length=%d\n",s1.length); //顯示stack內容 int i; for (i=s1.length;i>=0;i--) printf("%s\n",s1.stack[s1.length-i]); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.35.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1534225572.A.2A1.html ※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 13:51:44

08/14 14:07, 5年前 , 1F
你的elem的data是指標 4~7都指到buff上
08/14 14:07, 1F

08/14 14:08, 5年前 , 2F
buff內容有改當然4~7都會受到影響
08/14 14:08, 2F
在迴圈中 每次執行 都宣告一次 char buf[10]; 我以為 每次都會重新給 buf新的記憶體空間 實際上不是這樣嗎? ※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:12:35

08/14 14:20, 5年前 , 3F
只會在stack上配一次而已 寫在哪都一樣 除非你用到heap
08/14 14:20, 3F

08/14 14:20, 5年前 , 4F
char *buf = (char *)malloc(10*sizeof(char));
08/14 14:20, 4F
所以說 我for中的element item; 每次迴圈 item都是取用同一塊記憶體? 怎嚜記得 宣告一次 就會取新的一塊記憶體 ※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:29:38

08/14 14:35, 5年前 , 5F
就你記錯這樣
08/14 14:35, 5F
好的 謝謝指教 那請問 想要把元素 for迴圈 推入stack 我應該用什麼方法 目前暫時沒想到怎麼傳遞不同字串 ※ 編輯: gcmtw88 (61.220.35.157), 08/14/2018 14:38:29

08/14 14:52, 5年前 , 6F
把下面那篇的問題解決 就知道怎麼傳遞字串了 謝謝各位
08/14 14:52, 6F
文章代碼(AID): #1RScoaAX (C_and_CPP)