我期望下面的代码应该打印不同的时间戳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)
返回值指向静态分配的字符串,该字符串可能会被任何日期和时间函数的后续调用覆盖。
ctime() 返回一个指向它使用的内部缓冲区的指针。每次调用时,它都会返回指向同一缓冲区的指针:
cout << "time now " << ctime(&t1) << endl << " time later " << ctime(&t2) <<endl;
Run Code Online (Sandbox Code Playgroud)
对于这行代码,编译器生成的代码调用ctime()两次,然后执行<<运算符。但是在第二次调用 时ctime(),它第二次覆盖了缓冲区,因此当<<操作符格式化输出时,因为第一次调用的结果ctime()是同一个指针,并且它指向的缓冲区已被第二次覆盖调用ctime(),您会得到两次打印相同的时间。
感谢您发布一个最小、完整且可验证的示例。
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |