來看乙個程式:
#include
int main (
int argc,
char
**ar**)
我這裡不談什麼緩衝區溢位,也和各種漏洞無關,我這裡說的僅僅是乙個操作習慣,或者說程式設計習慣問題。
問題,輸入abc會發生什麼?
看看答案:
[root@localhost ]
# ./a.out
abcbuf is: a
[root@localhost ]
# bc
bc 1.06.95
this is free software with absolutely no warranty.
for details type `warranty'.
^c(interrupt) exiting bc.
why??
很簡單,因為前台bash程序在exec了a.out之後,就把終端/dev/pts/0(或者別的)給了a.out,read(0,就是讀取的這個終端的資料:
然而a.out僅僅讀取1個字元,剩下的bc就會留在/dev/pts/0的輸入緩衝區了,當你輸入abc時,緩衝區裡有3個字元,當回車按下後,輸入緩衝區裡有4個字元:『a』,『b』,『c』,』\cr』,發生了下面的事情:
萬一你輸入的是:arm -rf /呢…
所以,在程式的最後,別忘了清空你的輸入緩衝區:
int c
while
((c =
getchar()
)!='\n'
&& c !=
eof)
;
浙江溫州皮鞋溼,下雨進水不會胖! 帶有緩衝區的字元輸入流
帶有緩衝區的字元輸入流 使用這個流的時候,不需要自定義char陣列,或者不用定義byte陣列,自帶緩衝 當乙個流的構造方法中,需要乙個流的時候,這個被傳進來的流叫做節點流,外部負責包裝的流,叫做包裝流,或者處理流。建立物件時 bufferedreader的構造方法特殊,要接受乙個reader型別的引...
c語言輸入輸出緩衝區的概念
輸入輸出緩衝區的概念 我想以乙個例子說明,比如我想把一篇文章以字串行的方式輸出到計算機顯示器螢幕上,那麼我的程式記憶體作為資料來源而顯示器驅動程式作為資料目標,如果資料來源直接對資料目標傳送資料的話。資料目標獲得第乙個字元,便將它顯示。然後從埠讀取下乙個字元,可是這時就不能保證資料來源向埠傳送的恰好...
cin的用法及清空輸入緩衝區問題
問題描述 輸入資料時希望有個合法性檢驗的問題,如果輸入的資料不合法則程式提示重新輸入。最初 如下 include include using std cin using std cout using std endl using std vector int main while ivec.size...