scanf與scanf s的區別

2021-09-02 02:26:20 字數 758 閱讀 9357

自從用visualstudio2015之後就不願再去使用visual c++6.0了,但是最近在學資料結構圖時,總是在字元的連續輸入遇到困惑.

使用vs都知道,要用scanf_s對鍵盤讀入資料。

scanf("%c,%c",&a,&b);可以對字元連續輸入;

如果是迴圈輸入,在下新增getchar();這樣乙個語句吞噬掉輸入時的回車即可;

但是同樣用for(int i=0;i<10;i++){

scanf_s("%c,%c",&a,&b);

getchar();

確達不到相同的結果,debug時老是讀入乙個『 -52 ?』什麼的乙個不知道是什麼的鬼東西,使得下次輸入前就讀入這樣乙個無效資料。如:出現下面類似的樣子,後面直接一步調到低了。

我一直以為是關於沒有吞噬掉回車的問題,認真看了對scanf_s輸入後,事實並不是這樣的,scanf_s與scanf的還是有區別的,

畢竟是更新之後的版本。相比scanf_s安全,因為 scanf_s() 是針對「 scanf()在讀取字串時不檢查邊界,可能會造成記憶體洩

露」,scanf_s()用於讀取字串時,必須提供乙個數字以表明最多讀取多少位字元,以防止溢位。

因此for(int i=0;i<10;i++){

scanf_s("%c,%c",&a,1,&b,1);

getchar();

這樣就沒有問題了。

scanf函式與scanf s函式

ansi c中沒有scanf s 只有scanf scanf 在讀取時不檢查邊界,所以可能會造成記憶體洩露。所以vc 2005 2008中提供了scanf s 在最新的vs2013中也提供了scanf s 在呼叫時,必須提供乙個數字以表明最多讀取多少位字元。目前最新的c11標準中已經將scanf s...

gets 與 scanf 的區別

scanf 函式和gets 函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串 hellow word 則應該使用gets 函式。gets可以接收空格 而scanf遇到空格 回車和tab鍵都會認為輸入結束,所有它不能接收空格。char string 15 gets string 遇到回車認...

關於scanf與gets的區別

scanf與gets讀取字串 scanf與gets函式讀取字串的區別 前兩天有個同學問我scanf與gets的區別說了半天也沒說出來個所以然,就搜了一下,scanf 和gets的區別大致有著幾條 1.scanf 會忽略行開頭的所有空格,並以空格 換行符結束輸入 使用getchar 讀取scanf語句...