Ошибка C4996: "ctime"
У меня есть проект о статическом анализе исходного кода. Сообщение об ошибке: "ошибка C4996:" ctime ": эта функция или переменная может быть небезопасной". Вот часть кода, где я получаю ошибку, в ctime. Если кто-то может помочь мне преодолеть эту ошибку, я был бы рад.
virtual bool onTLSConnect( const CertInfo& info )
{
printf( "status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n"
"from: %s\nto: %s\n",
info.status, info.issuer.c_str(), info.server.c_str(),
info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(),
info.compression.c_str(), ctime( (const time_t*)&info.date_from ),
ctime( (const time_t*)&info.date_to ) );
return true;
}
1 ответ
Сообщение компилятора приходит от использования ctime
В любом случае, но ваше использование даст неверные результаты: оба вызова ctime вернут один и тот же адрес во внутренний, статический, локальный по потоку буфер, что означает ваш вызов printf
будет неправильно отображать одинаковые даты.
Как минимум, вы должны сделать это:
virtual bool onTLSConnect( const CertInfo& info )
{
std::string dateFrom(ctime(reinterpret_cast< const time_t* >(&info.date_from));
std::string dateTo (ctime(reinterpret_cast< const time_t* >(&info.date_to));
printf( "status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n"
"from: %s\nto: %s\n",
info.status, info.issuer.c_str(), info.server.c_str(),
info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(),
info.compression.c_str(), dateFrom.c_str(),
dateTo.c_str() );
return true;
}
Что касается компилятора, вы можете отключить это вместе с #define
, или вы можете отключить его только тогда, когда вам это нужно:
virtual bool onTLSConnect( const CertInfo& info )
{
#pragma warning(push)
#pragma warning(disable:4996)
std::string dateFrom(ctime(reinterpret_cast< const time_t* >(&info.date_from));
std::string dateTo (ctime(reinterpret_cast< const time_t* >(&info.date_to));
#pragma warning(pop)
printf( "status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n"
"from: %s\nto: %s\n",
info.status, info.issuer.c_str(), info.server.c_str(),
info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(),
info.compression.c_str(), dateFrom.c_str(),
dateTo.c_str() );
return true;
}