【问题标题】:how to remove warning C4996 with gmtime and asctime如何使用 gmtime 和 asctime 删除警告 C4996
【发布时间】:2014-04-04 19:44:32
【问题描述】:

我的 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);

【问题讨论】:

  • 你为什么不按照建议使用gmtime_sasctime_s
  • @DaanTimmer 我现在不知道怎么用?
  • 你为什么不简单地按照警告告诉你禁用它呢?也就是说,警告是正确的:不要使用这些功能,它们已被弃用是有原因的。 POSIX 标准定义了替换函数。
  • 呃,如果您只想使警告静音,消息说明如何执行此操作,如果您想知道如何使用这些功能,那么好的开始方式就是在搜索引擎中输入他们的名字。另请参阅有关 warning C4996 的 MSDN 页面。

标签: c++


【解决方案1】:

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

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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多