Erreur du compilateur: appel de fonction avec des paramètres pouvant être dangereux
Ai un code qui n'est pas le mien et sa production de cet avertissement atm:
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>
]
voici le code en question:
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;
};
et l'avertissement fait référence à l'ajouter.copie de la ligne. J'ai essayé de googler l'avertissement, mais ne peux pas travailler sur ce qu'il est. Peut quelqu'un m'aider à résoudre cette s'il vous plaît.
Visual Studio 2005 SP1
Windows 7 RC1
.
Edit: prepend est une chaîne qui est typedefed
typedef basic_string<char, char_traits<char>, allocator<char> > string;
source d'informationauteur Lodle
Vous devez vous connecter pour publier un commentaire.
L'avertissement est vous dire que vous risquez un débordement de mémoire tampon si
n
est trop grand -- qui, vous le savez ne peut pas se produire en raison de la façon dont tu as calculé avec unmin
mais les pauvres commpiler ne l'est pas. Je vous suggère de prendre le compilateur propres conseils etuse -D_SCL_SECURE_NO_WARNINGS
pour un fichier source...Consultez cette page MSDN pour la documentation sur l'avertissement
Le MS compilateur C++ a décidé de déprécier la méthode std::string::copie parce qu'il est potentiellement dangereux à utiliser et peut conduire à un dépassement de la mémoire tampon. Cette dépréciation est Microsoft et vous ne sera probablement pas le voir sur d'autres compilateur plates-formes.