2013-12-12 232 views
1

在我的程序中,我試圖在一天//月//年佈局中顯示今天的日期。我嘗試過使用許多不同的方法,但我不斷收到有關不安全使用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_s來代替。」 所以我做到了,現在我得到 「localtime_s」:函數不接受1個參數

+2

如果可用,請使用'std :: put_time'。 – chris

+3

你究竟試過了什麼?哪裏有問題?你會得到什麼錯誤? – Varaquilex

+0

你有沒有看到這個http://stackoverflow.com/questions/997946/how-to-get-current-time-and-date-in-c? – mchfrnc

回答

1

不幸的功能從time_t到格式化文本的標準定義都顯得有一些潛在的安全問題,特別是在多線程化程序。這讓您可以在選擇供應商特定路線還是放棄安全性以換取便攜性之間進行選擇。

微軟具體路線: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 

如果你喜歡符合標準更安全的版本,你可以使用你原來的你的代碼版本,但添加在文件的頂部以下

2

localtime_s是一個特定於Microsoft的函數,它與C標準函數類似,但參數略有不同,不易出錯。有關更多信息,請參閱http://msdn.microsoft.com/en-us/library/a442x3ye.aspx。這就是說,如果你使用的是C++,那麼使用C++標準庫的chrono部分的函數可能會更好。它們更易於使用和安全:http://en.cppreference.com/w/cpp/chrono

+0

大多數使用chrono的例子似乎仍然使用'time_t'和'localtime'。所以我不確定使用它會幫助微軟決定標準庫函數折舊的問題。 – PeterSW