以下的代碼:app
#include <stdio.h>this #include <string>spa #include <algorithm>rest #include <cassert>code #include <cctype>orm #include <boost/algorithm/string.hpp>blog
int main(int argc, char *argv[])ci {get char song[17] = "Book of Taliesyn";string boost::to_upper(song); assert(std::string(song) == "BOOK OF TALIESYN");
return 0; }
|
編譯的時候報錯:
Error 1 error C4996: 'std::_Transform1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 1026 1 Test13 |
[分析]
The warning is telling you that you risk a buffer overflow if |
-D is a command line compiler flag which causes the rest of the text to be treated as if there was a #define in your code.
In solution explorer, right click the project, select "properties". The project property page will open. Expand the ">C/C++" entry in the tree on the left and select "Preprocessor" under that. The top entry in the right pane should be "Preprocessor Definitions". In that edit box, add _SCL_SECURE_NO_WARNINGS, separating it from the other entries with a ; |
[解決]
加上這個宏定義後,就編譯經過了.