在C語言中使用scanf語句時遇到的問題總結

    在使用visual studio2013編寫c語言代碼時,遇到了這樣的幾個小問題,進行以下的總結。c++

1, 關於使用scanf語句報錯的解決方案1

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character.\n");
    scanf("%c", &ch);   
    printf("The code for %c is %d.\n", ch, ch);

    return 0;
}

    如上所示的代碼,以前在其餘的編譯平臺,就能夠正常的運行,例如運行時,你輸入字母c,便會打印出The code for c is 67.可是在visual studio2013中運行會提示以下所示的錯誤:安全

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   
    按照提示,咱們更改scanf爲scanf_s,再次運行,發現再也不提示編譯錯誤。仔細分析一下緣由:ide

    其實從官網文檔中能夠得知,出現這種問題,只是由於這是新版vc庫添加的警告,微軟認爲scanf的使用存在安全隱患,由於C/C++中的字符串處理都是以\0爲截止符的,若是搜索不到\0,容易出現字符串越界全部vc擴展的所謂安全標準庫,都添加了一個參數用以指定字符串參數的長度,用以免這種安全隱患。其實要避免出現這種問題,解決方法很簡單,鼠標單擊「項目文件」,按下Alt+Enter,顯示以下界面,spa

demo1

    點擊c/c++,預處理器選項,選擇右側的預處理器定義,並選擇編輯並在編輯框中添加一行內容_CRT_SECURE_NO_DEPRECATE就OK了。按下ctrl+F5運行程序不在報錯,程序運行正常,code

DEMO2

2.按照系統提示,更改scanf爲scanf_s

    若是,咱們按照系統提示更改成scanf_s,咱們運行程序,系統再也不報錯,可是程序運行時,咱們一樣輸入輸入C,查看結果以下所示,blog

DEMO3

    那麼問題又來了,不管咱們咱們輸入什麼字符,系統輸出結果老是The code for     is  0.只有是爲何呢,咱們查看官方關於這個問題的解答(連接地址http://msdn.microsoft.com/en-us/library/w40768et.aspx),ip

a single character may be read as follows:ci

<P>char c;
<P>scanf_s("%c", &amp;c, 1);</P>

 

When multiple characters for non-null terminated strings are read, integers are used as the width specification and the buffer size.開發

<P>char c[4];
<P>scanf_s("%4c", &amp;c, _countof(c)); // not null terminated</P>

    原來是由於scanf_s在使用該功能是,有新的規定,必須在最後面聲明要讀取的字符串的長度,咱們按照MSDN上面的備註,更改程序以下:文檔

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character.\n");
    scanf_s("%c", &ch,1);   //從鍵盤讀取一個字符
    printf("The code for %c is %d.\n", ch, ch);

    return 0;
}

    再次運行程序,輸出結果以下:

DEMO4

總結:不少時候,官方文檔是最權威的參考資料,做爲一個開發者,學會高效的使用官方文檔是尤其重要的。

相關文章
相關標籤/搜索