在我的程序中,我试图在一天//月//布局中显示今天的日期。我尝试过使用很多不同的方法,但是我一直在不安全地使用cTime。
是否有一种简单的方法让我的程序显示日期:
time_t t = time(0); // get time now
struct tm * now = localtime( & t );
cout << (now->tm_year + 1900) << '-'
<< (now->tm_mon + 1) << '-'
<< now->tm_mday
<< endl;
我一直在“'localtime':这个函数或变量可能不安全。请考虑使用localtime_s。” 所以我做了,现在我明白了 'localtime_s':函数不带1个参数
答案 0 :(得分:2)
localtime_s是一个特定于Microsoft的函数,类似于C标准函数,但具有稍微不同的参数,不易出错。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/a442x3ye.aspx。
也就是说,如果您使用的是C ++,那么最好使用C ++标准库的chrono部分中的函数。它们更易于使用且更安全:http://en.cppreference.com/w/cpp/chrono
答案 1 :(得分:1)
不幸的是,从time_t
到格式文本的函数的标准定义似乎都存在一些潜在的安全问题,特别是在多线程程序中。这使您可以选择供应商特定的路线或放弃安全性以换取便携性。
Microsoft特定路线:
localtime_s的详细信息可在此处获取:http://msdn.microsoft.com/en-us/library/a442x3ye%28v=vs.110%29.aspx
以下内容应该在visual studio 2012上有效,而不会发出警告:
#include <ctime>
#include <iostream>
using namespace std;
int main() {
time_t t = time(0); // get time now
struct tm now;
localtime_s(&now, &t);
cout << (now->tm_year + 1900) << '-'
<< (now->tm_mon + 1) << '-'
<< now->tm_mday
<< endl;
}
然而,localtime_s是微软特定的,因此使用它将限制代码的可移植性。
标准合规但不太安全的路线:
如果您希望标准符合更安全的版本,则可以使用原始版本的代码,但在文件顶部添加以下内容:
#define _CRT_SECURE_NO_WARNINGS