我有一些不是我的代码,目前它正在产生以下警告:
iehtmlwin.cpp(264) : warning C4996: 'std::basic_string<_Elem,_Traits,_Ax>::copy': 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'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
c:\program files (x86)\microsoft visual studio 8\vc\include\xstring(1680) : see declaration of 'std::basic_string<_Elem,_Traits,_Ax>::copy'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
这是问题中的代码:HRESULT STDMETHODCALLTYPE Read(void __RPC_FAR *pv, ULONG cb, ULONG __RPC_FAR *pcbRead)
{
if (prepend.size() > 0)
{
int n = min(prepend.size(), cb);
prepend.copy((char *) pv, n);
prepend = prepend.substr(n);
if (pcbRead)
*pcbRead = n;
return S_OK;
};
int rc = Read((char *) pv, cb);
if (pcbRead)
*pcbRead = rc;
return S_OK;
};
警告涉及到prepend.copy行。我已经尝试谷歌这个警告,但不知道它到底在说什么。请有人帮助我解决这个问题。
Visual Studio 2005 SP1 Windows 7 RC1
。
编辑:prepend是一个typedefed字符串。
typedef basic_string<char, char_traits<char>, allocator<char> > string;
pragma warning(disable: 4996)
对我不起作用;为每个单独的文件(和每个单独的构建)添加_SCL_SECURE_NO_WARNINGS
到定义中似乎解决了问题。 - Nathan Paul Simons