如何使用gmtime和asctime删除警告C4996

时间:2014-04-04 19:44:33

标签: c++

我的C ++项目中有4级警告我要解决警告

  

警告1警告C4996:'gmtime':此函数或变量可能是   不安全的。请考虑使用gmtime_s。要禁用弃用,请使用   _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。

     

警告2警告C4996:'asctime':此函数或变量可能是   不安全的。请考虑使用asctime_s。要禁用弃用,请使用   _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。

代码C ++

time_t ltime;
time(&ltime);
tm* gmt = gmtime(&ltime);

char* asctime_remove_nl = asctime(gmt);

1 个答案:

答案 0 :(得分:1)

下面的函数返回指向可能被其他后续调用(K& R Book)覆盖的静态对象的指针。因此,它们不被认为是安全的,并且由于VS编译器会给出警告/错误。可以通过在项目中添加MACRO(.proj文件)(CRT_SECURE_NO_WARNINGS)来删除它。

gmtime()
asctime()

但是,我们可以编写小实用程序函数来复制这些静态字符串。

// This would return the copy of time/date in std::string object to caller
std::string get_gmtime_asctime() {
 time_t ltime;
 time(&ltime);
 struct tm* gt = ::gmtime(&ltime);
 char* tmp = ::asctime(gt);
 std::string output(tmp);
 return output;
}

int main() {
    std::string out = get_gmtime_asctime();
    std::cout<<out<<std::endl;

}