Tôi đang làm việc trên một dự án đa nhiệm Win32 C++ và tôi muốn sử dụng một trong các tùy chọn thay thế an toàn chủ đề localtime_*
an toàn cho localtime()
.localtime_r hỗ trợ trên MinGW
Rất tiếc, tôi phải sử dụng trình biên dịch MinGW và không thể sử dụng localtime_s
bên ngoài nội dung của Microsoft.
Vấn đề là không phải localtime_r
đang làm việc: đoạn mã liên quan là
#include <ctime>
...
string getCurrentTime()
{
time_t t;
time(&t);
struct tm timeinfo;
//localtime_s(&timeinfo, &t);
localtime_r(&t, &timeinfo);
char buf[128];
strftime(buf, 128, "%d-%m-%Y %X", &timeinfo);
return string(buf);
}
...
Đây là trình biên dịch ra:
error: 'localtime_r' was not declared in this scope
có hỗ trợ MinGW localtime_r
?
Nếu không, có tồn tại phương án thay thế an toàn không? (không bao gồm tăng/QT/etc mà tôi không thể sử dụng).
EDIT: đây là <time.h>
cung cấp bởi cài đặt MinGW của tôi: http://pastebin.com/0CYBfMzg
gì "' localtime_s' không thể được sử dụng bên ngoài Microsoft thứ" nghĩa là gì? MinGW nhắm mục tiêu msvcrt.dll và msvcrt.dll không xác định 'localtime_s' (được xuất dưới dạng' _localtime32_s' và '_localtime64_s', tương ứng với 32-bit và 64-bit' time_t'). Nếu nó không được khai báo bởi các tiêu đề thư viện MinGW, thì hãy tự khai báo nó và gọi nó. Xem các tiêu đề thư viện Visual C++ để khai báo. –
@JamesMcNellis Nhiều nguồn nói rằng chỉ có thể được sử dụng với trình biên dịch microsoft. Tôi đã thử (bao gồm '') và biên dịch với g ++ tôi nhận được 'lỗi: 'localtime_s' không được khai báo trong phạm vi này'. Ví dụ: http://stackoverflow.com/questions/17085603/time-functions-in-mingw/17088374#17088374 –
eang
Tôi không biết "nhiều nguồn" này là gì, nhưng chúng sai. Nó không được khai báo bởi '', nó được khai báo bởi '' trong (cũ) Visual C++ SDK. Nếu nó không được khai báo bởi bản sao của bạn '' của MinGW, bạn cần tự khai báo nó. –