看板 C_and_CPP 關於我們 聯絡資訊
int stackPush(struct stackTag *stack, void *dataptr) { struct stackNodeTag *newptr; newptr = (struct stackNodeTag *)malloc(sizeof(struct stackNodeTag)); if (newptr == NULL) return 0; newptr->dataptr = dataptr; newptr->link = stack->top; stack->top = newptr; (stack->count)++; return 1; } int main() { char str[512]; struct stackTag *stack; while(fgets(buf,512,stdin)!=NULL) { while(buf[i]!='\0') { stackPush(stack, str); } } 找到一個相當明顯的問題 每一個 newptr, 它的 dataptr 全部都是指向 main 的 str 陣列 在最後一次跑完,str 裡的資料是什麼,stack 裡就通通是什麼 因此才會出現「最後印出來的東西都一樣」,你印的都是 main 裡面 str[] 的內容啊 要避免這個問題,可以在 stackPush 裡面多加一個複製的動作 newptr->dataptr = dataptr; 這行修改成 newptr->dataptr = malloc(strlen(dataptr)); //或者想辦法取得dataptr的長度 strcpy(newptr->dataptr, dataptr); -- 題外話,我想原po是想要一般化、泛用化,才使用 void * 來存資料 不過在基本款還沒完成之前,覺得 void * 好像只是給自己找麻煩...XD -- 另外,我還是要宣導一下,請善用 debugger 工具 http://james803.pixnet.net/blog/post/17991240 不過 Dev-C++ 的要怎麼用,就要靠原 po 自己研究了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (10/18 19:07)
tomap41017:用template不是很好嗎(大誤) 10/18 20:14
joefaq:用STL不是更好嗎 (無誤) 10/18 20:36
xatier:http://ppt.cc/U(DZ ADT 的藝術XD 10/18 20:39
rg550:謝謝你 原來問題是在str 我後來將每次str都換不同位址 10/18 21:53
rg550:有成功解決問題! 謝謝~! 10/18 21:53