Got một số mã đó không phải là mỏ và sản xuất atm cảnh báo này của mình:Lỗi trình biên dịch: Cuộc gọi hàm với các tham số mà bạn có thể không an toàn
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>
]
đây là mã trong câu hỏi:
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;
};
và cảnh báo đề cập đến dòng prepend.copy. Tôi đã thử googling cảnh báo nhưng không thể làm việc ra những gì nó là về về. Có thể một số giúp tôi giải quyết điều này.
Visual Studio 2005 SP1 Windows 7 RC1
.
Edit: thêm vào trước là một chuỗi được typedefed
typedef basic_string<char, char_traits<char>, allocator<char> > string;
tôi đã kết thúc bằng cảnh báo #pragma (tắt: 4996) vì bộ tiền xử lý xác định không hoạt động – Lodle
@alex - không yêu cầu 'n' của nó là [tiềm năng] quá lớn. Bạn đang được cảnh báo về việc sử dụng một hàm nhận con trỏ đích mà không có kích thước đích. Đối với những gì giá trị của nó, xác định D_SCL_SECURE_NO_WARNINGS để ngăn chặn cảnh báo là một ý tưởng tồi. – jww
@Lodle - Odd, cảnh báo 'pragma (disable: 4996)' không hoạt động với tôi trong VS2010; thêm '_SCL_SECURE_NO_WARNINGS' vào các định nghĩa cho từng tệp riêng lẻ (và mỗi bản dựng riêng biệt) dường như thực hiện thủ thuật. –