gpt4 book ai didi

c++ - 在 cout 上打印时间时出现奇怪的 C++ 行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:36 25 4
gpt4 key购买 nike

运行以下代码:

  1 #include <iostream>
2 int main(int argc, char** argv)
3 {
4 time_t t1 = time(0);
5 time_t t(0);
6 std::cout<<"BUG LINE"<<std::endl<< ctime(&t) << ctime(&t1) ;
7 std::cout<<"PRINTS FINE HERE"<<std::endl;
8 std::cout<< ctime(&t);
9 std::cout<< ctime(&t1);
10 return 0;
11 }

构建:g++ test1.cpp

Output:
./a.out
BUG LINE
Thu Jan 1 01:00:00 1970
Thu Jan 1 01:00:00 1970
PRINTS FINE HERE
Thu Jan 1 01:00:00 1970
Wed Jul 10 16:31:48 2013

为什么代码的 #6 中的流变得奇怪??

最佳答案

http://www.cplusplus.com/reference/ctime/ctime/

The returned value points to an internal array whose validity or value may be altered by any subsequent call to asctime or ctime.

http://en.cppreference.com/w/cpp/chrono/c/ctime

The string may be shared between std::asctime and std::ctime, and may be overwritten on each invocation of any of those functions.

在您的示例中,在第 6 行,首先评估 ctime(&t1),然后覆盖字符串的 ctime(&t)(未指定先评估的那个,并且编译器通常以相反的顺序求值(经常,但并不总是))。

TL;DR:阅读文档可能会有帮助。

关于c++ - 在 cout 上打印时间时出现奇怪的 C++ 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com