這種微軟的警告,主要因為那些c庫的函式,很多函式內部是不進行引數檢測的(包括越界類的),微軟擔心使用這些會造成記憶體異常,所以就改寫了同樣功能的函式,改寫了的函式進行了引數的檢測,使用這些新的函式會更安全和便捷。關於這些改寫的函式你不用專門去記憶,因為編譯器對於每個函式在給出警告時,都會告訴你相應的安全函式,檢視警告資訊就可以獲知,在使用時也再檢視一下msdn詳細了解。庫函式改寫例子:1、vs2005後使用帶「_s」字尾的非標準函式,如sprintf改為sprintf_smkdir改寫為 _mkdir
fopen」改寫為 fopen_s
stricmp改寫為 stricmp_s
sprintf改寫為sprintf_s
strcpy改寫為strcpy_s
char filename[1024];//需要預先分配緩衝區
char path1[128] = "d:\\program\\tesseract-ocr\\tesseract.exe";
char path2[128] = "d:\\program\\tesseract-ocr\\";
//sprintf(filename, "%s %s", path1,path2);
sprintf_s(filename, sizeof( filename ), "%s %s", path1,path2);
2、專案屬性->配置屬性->c/c++ ->預處理器(preprocessor)->預處理器定義(preprocessor definitions)
新增_crt_secure_no_deprecate和_scl_secure_no_deprecate這兩個巨集。
在vs2013以後的版本中,增加了inet_pton()、inetpton()之類的新函式,用於ip位址在「點分十進位制」和「二進位制整數」之間轉換,並且能夠處理ipv4和ipv6。而inet_addr是老函式,高版本vs在編譯時預設使用了新函式,所以會報該錯誤。1、用所提示的inet_pton新函式代替inet_addr函式。
#include ... ...
= inet_addr(ip);
inet_pton(af_inet, ip, &sockaddr.sin_addr);
2、修改vs配置如下(兩種):
a、專案 -> 屬性 -> c/c++ ->常規(general)->sdl檢查(sdl checks),將「是(yes)」改為「否(no)」,即可使用老函式。
b、專案屬性->配置屬性->c/c++ ->預處理器(preprocessor)->預處理器定義(preprocessor definitions)
新增「_crt_secure_no_warnings」
引用依賴release的庫,對debug不相容,在debug模式下無法編譯通過更換成release模式編譯,或者更換相應庫
使用的qt版本不對導致。替換對應qt版本的庫
Xcode 常見編譯問題
1 引用 include 報錯 3 公升級到xcode9.3之後,大括號裡宣告的屬性,在block裡面就會出現block implicitly retains self explicitly mention self to indicate this 的警告,大量這樣宣告的屬性,產生了大量的黃色警告...
Qt常見編譯問題
qt在嵌入式開發中經常遇到沒有頭緒的錯誤提示,有的時候很難找到問題的所在,就我目前這兩天遇到的問題做乙個小總結,如下 setdevinfraweb.o in function setdevinfraweb setdevinfraweb setdevinfraweb.cpp text 0x38 und...
交叉編譯常見問題
1 新增環境變數 網上的解決辦法很多 2 找不到編譯器 在用交叉編譯器時遇到的問題 解決了 su 輸入密碼,這樣就進入了root使用者許可權,這個時候再輸入下面命令 source etc profile 結果問題就解決了 最後查詢su 和sudo 的區別,終於理解了,原來是工作環境的問題。希望此貼以...