在使用visual studio2013編寫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,再次運行,發現不再提示編譯錯誤。仔細分析一下原因:
其實從官網文檔中可以得知,出現這種問題,只是因為這是新版vc庫添加的警告,微軟認為scanf的使用存在安全隱患,因為C/C++中的字符串處理都是以\0為截止符的,如果搜索不到\0,容易出現字符串越界所有vc擴展的所謂安全標准庫,都添加了一個參數用以指定字符串參數的長度,用以避免這種安全隱患。其實要避免出現這種問題,解決方法很簡單,鼠標單擊“項目文件”,按下Alt+Enter,顯示如下界面,
點擊c/c++,預處理器選項,選擇右側的預處理器定義,並選擇編輯並在編輯框中添加一行內容_CRT_SECURE_NO_DEPRECATE就OK了。按下ctrl+F5運行程序不在報錯,程序運行正常,
2.按照系統提示,更改scanf為scanf_s
如果,我們按照系統提示更改為scanf_s,我們運行程序,系統不再報錯,但是程序運行時,我們同樣輸入輸入C,查看結果如下所示,
那么問題又來了,無論我們我們輸入什么字符,系統輸出結果總是The code for is 0.只有是為什么呢,我們查看官方關於這個問題的解答(鏈接地址http://msdn.microsoft.com/en-us/library/w40768et.aspx),
a single character may be read as follows:
<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; }
再次運行程序,輸出結果如下:
總結:很多時候,官方文檔是最權威的參考資料,作為一個開發者,學會高效的使用官方文檔是尤為重要的。




