在使用visual studio2013編寫c語言代碼時,遇到了這樣的幾個小問題,進行以下的總結。c++
#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
點擊c/c++,預處理器選項,選擇右側的預處理器定義,並選擇編輯並在編輯框中添加一行內容_CRT_SECURE_NO_DEPRECATE就OK了。按下ctrl+F5運行程序不在報錯,程序運行正常,code
若是,咱們按照系統提示更改成scanf_s,咱們運行程序,系統再也不報錯,可是程序運行時,咱們一樣輸入輸入C,查看結果以下所示,blog
那麼問題又來了,不管咱們咱們輸入什麼字符,系統輸出結果老是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", &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", &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; }
再次運行程序,輸出結果以下:
總結:不少時候,官方文檔是最權威的參考資料,做爲一個開發者,學會高效的使用官方文檔是尤其重要的。