const int siz=5;
char *ch1=new char[siz];//動態分配記憶體
cin>>ch1;
cout<<ch1<<' ';
例如輸入:sdadfdsf,輸出也是sdadfdsf
我輸入的是超過5個數的字符,最終結果將其全部輸出。不是應該是提示錯誤說輸入錯誤或者只輸出5個字符嗎?
有哪位能幫我解釋清楚一點。謝謝?
uj5u.com熱心網友回復:
這個問題涉及記憶體的分配在計算機中,你申請5個位元組記憶體,在系統記憶體中,只要后面有空間且不是已使用的,它的確可以用超過5個以上的空間
但這樣做是安全也不穩定的,你已經是下標溢位,在開發中.下標溢位的結果是"不可預見"的,也就是就結果可能是正確的
但也可能得到你無法預料的結果
uj5u.com熱心網友回復:
緩沖區太小了,代碼不安全啊,緩沖區溢位,容易被輸入很長的精心構造的不安全的機器代碼指令并覆寫行程代碼段中部分代碼,然后程式某個跳轉指令轉到執行被覆寫的不安全的代碼導致機器攻擊。雖然現代的作業系統和編程語言有一定的機制防范,但是緩沖區溢位還是可能導致攻擊產生的,如果你撰寫的代碼是系統軟體級的。uj5u.com熱心網友回復:
非常感謝二樓三樓的回復,現在懂了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84636.html
標籤:基礎類
上一篇:VS2012 軟體編程問題求解
