while(1){
//Command prompt
char *command;
printf("%s>",current_working_directory);
scanf("%s",command);<--seg faults after input has been received.
printf("\ncommand:%s\n",command);
}
我收到了幾個不同的錯誤,他們似乎並不真正可重現(除了在這一點上的段錯誤)。這段代碼在大約10分鐘前運行良好,然後它無限循環printf命令,現在它在上面提到的行上發生了seg錯誤。我改變的唯一的東西是scanf(">%s",command);
到目前爲止。如果我將命令變量更改爲數組,它將起作用;顯然這是因爲存儲空間已經被預留了。scanf段錯誤和各種其他異常內循環
- 我被起訴約告訴別人,他們需要的malloc一個指針*(但通常似乎解決的問題,如使之成爲一個數組)
- 我輸入的命令是「魔法」 - 5個字符 - 所以不應該有任何瘋狂的堆棧溢出。
- 我與最新版本的Xcode(非OS4)和標準GCC在Mac OS X 10.6上運行
- 這是我的編譯程序:
gcc --std=c99 -W sfs.c
只是想弄清楚到底是怎麼回事上。由於這是一個學校項目,我永遠不會再看到,我只是編寫一些noob的工作,這將使我的老闆哭泣:)但事後我很想弄清楚爲什麼這是發生的,而不是隻是做一些修復它,如果有一些修復它爲什麼修復工程。
是的,我認爲通過使用char *命令,輸入將被放置在堆棧上。我經常遇到這個問題,最終會使用malloc和免費的濫用程序來保持我的程序不會發生seg錯誤。我在3周內畢業,並且我不需要爲愚蠢的seg-faults錯誤點:) – Kaili 2010-04-12 22:26:22
這些都是C中非常基本的概念,當你將'command'傳遞給scanf函數時,scanf不能將該指針指向某處,也不C可以奇蹟般地在堆棧上分配空間並在那裏指向指針。您需要提供存儲。 – leeeroy 2010-04-12 22:34:50
@Shadow:名爲command的變量(通常)位於堆棧上。但它是一個具有潛在「隨機」值的指針,直到初始化爲止。 scanf會嘗試將數據寫入該「隨機」地址。 – 2010-04-12 22:43:57