调用 ctime 两次会产生具有不同输入的相同输出

ale*_*io1 1 c++ time

我有这段简单的代码

#include <iostream>
#include <ctime>

using namespace std;

int main()
{

    time_t now = time(0);
    tm timeDate;
    strptime("2023-2-10 15:03","%Y-%m-%d %H:%M", &timeDate);

    time_t time_input = mktime(&timeDate);
    char* dt = ctime(&now);
    char* dt2 = ctime(&time_input);

    cout << "The local date and time is: " << dt << endl;
    cout << "The input date and time is: " << dt2 << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

应该打印这两个日期。但我收到的日期与首先处理的日期相同。

本地日期和时间为:2023 年 2 月 10 日星期五 15:03:00
输入日期和时间为:2023 年 2 月 10 日星期五 15:03:00

或者

本地日期和时间为:2023 年 2 月 13 日星期一 12:32:17
输入的日期和时间为:2023 年 2 月 13 日星期一 12:32:17

Bot*_*tje 5

ctime函数不可重入,这意味着您无法安全地多次调用它并重用相同的输出。相反,使用将ctime_r其输出写入您提供的缓冲区的函数,然后时间会有所不同。