C 語言中字串大小的問題
高等 C 語言簡介字串指標與陣列函數結構物件導向記憶體檔案錯誤處理巨集處理C 與組合語言資料結構動態字串動態陣列鏈結串列雜湊表開發環境MakeCygwinMinGWDevC++wxDevC++編譯器gcc 編譯器TinyCC 編譯器LCC 編譯器應用主題CGI 程式GNU 程式視窗程式影像處理練習題訊息相關網站參考文獻最新修改簡體版English |
在 C 語言當中,最惱人的莫過於如何決定字串或陣列大小的這個問題了,舉例而言,在下列程式當中,我們宣告 input 大小為 5,但是我們永遠不會知道 5 到底夠不夠,萬一不夠就會造成當機,甚至被有心人士透過「緩衝區溢位」方法攻擊,這是使用 C 語言陣列時經常遇到的困擾。 程式一:很容易「緩衝區溢位」的程式
即使我們宣告 char input[100] 也有可能不夠,但是如果宣告 char input[10000],會不會太浪費記憶體了,到底應該如何處理呢? 其實在 scanf 這樣的函數中,可以用 %<number>s 指定大小,以下範例就改進了上述問題,因此當輸入字串長度超過 5 時,就會被截掉, 程式二:不會造成「緩衝區溢位」的程式 #include <stdio.h> int main() { char input[6]; // 注意,這裡必須宣告 6=5+1,因為還有結束字元 \0。 scanf("%5s", input); printf("Your input : %s", input); } 執行結果
|
page revision: 4, last edited: 18 Nov 2012 02:59
Post preview:
Close preview