如下的代码:


#include <stdio.h>

#include <string>

#include <algorithm>

#include <cassert>

#include <cctype>

#include <boost/algorithm/string.hpp>


int main(int argc, char *argv[])

{

char song[17] = "Book of Taliesyn";

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



[分析]

  1. 搜索到如下的文章:


The warning is telling you that you risk a buffer overflow if ​​n​​​ is too large -- which you know can't happen because of the way you just computed with a ​​min​​​, but the poor commpiler doesn't. I suggest you take the compiler's own advice and ​​use -D_SCL_SECURE_NO_WARNINGS​​ for this one source file...



  1. 关于如何修复



-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 ;



[解决]

Compiler Error: Function call with parameters that may be unsafe_microsoft


加上这个宏定义后,就编译通过了.