Masz jakiś kod, który nie jest mój, a jego produkcją to ostrzeżenie atm:Compiler Error: Wywołanie funkcji z parametrami, które mogą być niebezpieczne
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>
]
jest to kod w pytaniu:
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;
};
i ostrzeżenie dotyczy linii prepend.copy. Próbowałem googling ostrzeżenie, ale nie mogę dowiedzieć się, co jest na temat. Czy ktoś może mi pomóc rozwiązać ten problem.
Visual Studio 2005 SP1 Windows 7 RC1
.
Edit: prepend jest ciągiem znaków, który jest typedefed
typedef basic_string<char, char_traits<char>, allocator<char> > string;
skończyło się przy użyciu #pragma ostrzeżenie (wyłącz: 4996) jak preprocesor zdefiniować didnt pracy – Lodle
@alex - jego nie twierdząc, "n" jest [potencjalnie] zbyt duży. Otrzymujesz ostrzeżenie o użyciu funkcji, która pobiera wskaźnik miejsca docelowego bez rozmiaru docelowego. Jak na razie warto, zdefiniowanie D_SCL_SECURE_NO_WARNINGS do pominięcia ostrzeżeń jest złym pomysłem. – jww
@Lodle - Odd, "ostrzeżenie pragma (wyłącz: 4996)" nie działa dla mnie w VS2010; dodanie '_SCL_SECURE_NO_WARNINGS' do definicji dla każdego pojedynczego pliku (i każdej osobnej kompilacji) wydawało się działać. –