當前位置:編程學習大全網 - 源碼下載 - 用VS編譯C 出現壹個警告 什麽意思啊

用VS編譯C 出現壹個警告 什麽意思啊

警告 2 warning C4013: “getch”未定義;假設外部返回 int d:\文件類\c語言\c 語言項目\c\c\2.c 12 C源代碼是# include <stdio.h

void main(){int a[10];int i;for(i=0;i<10;i++){scanf("%d",&a[i]);}a[5]=a[5]+5;

printf("%d",a[5]);getch();}回答:很多涉及字符串的函數是不檢查越界的, 不安全。 所以後來有壹套新的安全函數替代這個, 第壹個warning就是建議妳用 scanf_s代替scanf 第二個 warning是說妳用的 getch()沒定義, 所以編譯器假定它是 int getch(void)。 用的函數最好先 include好頭文件

warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS

已經是安全主導的年代了,這些老舊的東西微軟提供了壹些新函式來取代,很簡單他在後面加了_s ,例如gets == gets_s ,strcpy == strcpy_s原因解釋這種微軟的警告,主要因為那些C庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關於這些改寫的函數妳不用專門去記憶,因為編譯器對於每個函數在給出警告時,都會告訴妳相應的安全函數,查看警告信息就可以獲知,在使用時也再查看壹下MSDN詳細了解。庫函數改寫例子:

mkdir改寫為 _mkdir

fopen”改寫為 fopen_s

stricmp改寫為 stricmp_s

strcpy改寫為strcpy_s解決方案:1 根據下面的warning提示:參見“fopen”的聲明

消息:“This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”

所以可以將函數按warning提示的第二句,改為使用fopen_s函數即可:

例如:FILE *pFile=fopen("1.txt", "w");改為:FILE* pFile;

fopen_s(&pFile, "1.txt", "w");

2 還是根據warning提示的地三句話:use _CRT_SECURE_NO_DEPRECATE

項目|屬性|配置屬性|C/C++|命令行|附加選項,加入/D "_CRT_SECURE_NO_DEPRECATE" (註:加入中括號中完整的內容)

3 降低警告級別:項目|屬性|配置屬性|C/C++|常規,自己根據情況降低警告級別(此法不推薦)

註意:高度重視警告:使用編譯器的最高警告級別。應該要求構建是幹凈利落的(沒有警告)。理解所有警告。通過 修改代碼而不是降低警告級別來排除警告。

編譯器是妳的朋友。如果它對某個構造發出警告,這經常是說明妳的代碼中存在潛在的問題。成功的構建應該是無聲無息的(沒有警告的)。《

  • 上一篇:如何系統的學習安卓逆向分析
  • 下一篇:現代農業監測系統主要包含什麽?
  • copyright 2024編程學習大全網