我正在进行一个有关静态源代码分析的大型项目,所有内容都能够成功编译,除了一件事。我已经在标题中提供了错误信息。困扰我的是它给出一个说不安全的错误信息。我原以为它应该只是一个警告而不是一个错误。顺便说一下,我正在使用Visual Studio 2012。以下是我在ctime中遇到错误的部分代码。如果有人可以帮助我解决这个错误,我会很高兴。
void CppCheckExecutor::reportProgress(const std::string &filename, const char stage[], const std::size_t value)
{
(void)filename;
if (!time1)
return;
// Report progress messages every 10 seconds
const std::time_t time2 = std::time(NULL);
if (time2 >= (time1 + 10)) {
time1 = time2;
// current time in the format "Www Mmm dd hh:mm:ss yyyy"
const std::string str(std::ctime(&time2));
// format a progress message
std::ostringstream ostr;
ostr << "progress: "
<< stage
<< ' ' << value << '%';
if (_settings->_verbose)
ostr << " time=" << str.substr(11, 8);
// Report progress message
reportOut(ostr.str());
}
}
std::localtime
也会返回指向静态数据的指针,可能不是线程安全的,因此这仅修复了可能的缓冲区溢出问题。 - interjaytime_t
到struct tm
的转换函数。 - Matthieu M.put_time
的任何警告。它有什么不安全之处? - Matthieu M.