如何正确使用ctime()来打印不同的时间戳

day*_*yup 5 c++ ctime

我期望下面的代码应该打印不同的时间戳t1和t2,但结果显示t1和t2是相同的.我在哪里弄错了?

#include<iostream>
#include<ctime>

using namespace std;

int main()
{
    time_t t1 = time(NULL);
    cout << "time now " << ctime(&t1) << endl;
    time_t t2 = t1 + 10000.0;
    cout << "time now " << ctime(&t1) << endl << " time later " << ctime(&t2) <<endl;
}
Run Code Online (Sandbox Code Playgroud)

结果:

time now Thu Apr 28 20:37:03 2016

time now Thu Apr 28 20:37:03 2016

 time later Thu Apr 28 20:37:03 2016
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 4

您的问题的答案可以在ctime() 函数的手册页中找到:

返回值指向静态分配的字符串,该字符串可能会被任何日期和时间函数的后续调用覆盖。

ctime() 返回一个指向它使用的内部缓冲区的指针。每次调用时,它都会返回指向同一缓冲区的指针:

 cout << "time now " << ctime(&t1) << endl << " time later " << ctime(&t2) <<endl;
Run Code Online (Sandbox Code Playgroud)

对于这行代码,编译器生成的代码调用ctime()两次,然后执行<<运算符。但是在第二次调用 时ctime(),它第二次覆盖了缓冲区,因此当<<操作符格式化输出时,因为第一次调用的结果ctime()是同一个指针,并且它指向的缓冲区已被第二次覆盖调用ctime(),您会得到两次打印相同的时间。

感谢您发布一个最小、完整且可验证的示例