在c++中调用time会改变我的结构体tm
Calling time in C++ changes my struct tm
我正试图将当前时间与文件的日期修改时间进行比较,并遇到一个奇怪的问题。我有一个结构体tm *,它保存文件被修改的时间,但在我调用time(NULL)之后,它被更改为当前日期。
我代码: printf("month: %dn", tmst->tm_mon);
time_t curTime = time(NULL);
printf("month: %dn", tmst->tm_mon);
struct tm * curSt = localtime ( &curTime );
printf("month: %dn", tmst->tm_mon);
. .其中st
是文件的struct stat
。输出:
month: 11
month: 5
为什么会这样?我应该做些什么改变?
来自文档:
返回值指向一个内部对象,该对象的有效性或值可以通过后续对gmtime或localtime的调用而改变。
阅读文档。
文档告诉你函数是如何工作的。
(localtime
返回一个指针是一个大线索:你认为谁释放了指针?: D)
参见localtime(3)
手册页:
返回值指向一个静态分配的结构体,该结构体可能被后续对日期和时间函数的调用覆盖。
如果你不想让它在你下面被修改,你需要把它复制出来,例如:
// Dereference and copy the result:
struct tm tmst = *localtime ( &st.st_mtime );
还可以使用可重入变量localtime_r
将结果复制到传递给它的参数中,但请注意,该函数不可移植。
相关文章:
- 为什么我的函数接受"std::string"进行排序不会改变它?
- C++:我的链表尾巴没有改变?我似乎无法让节点正确指向彼此?
- "top"值不会改变我推送或弹出堆栈的次数
- 为什么当我改变光源的位置时,光源不移动?
- 为什么我的函数不改变对象的属性
- 为什么我的Qt小部件的焦点被改变了?
- 我的c ++数组值不想改变,它输出无限循环
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- cocos2d-x每次我需要精灵或只是改变它的纹理时,制作精灵的最佳做法是什么
- 应该很琐碎,为什么我不能改变我的向量的值
- 为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
- 当我改变他的背景时,我失去了按钮的功能
- 为什么从我的函数中删除"cout"会改变其结果?
- C++ 为什么我的文本数组在我用另一个文本数组覆盖后不会改变?
- 为什么我的循环范围不会改变元素?
- 我的对象在矢量中的地址改变了
- 在c++中调用time会改变我的结构体tm
- 我应该改变我的设计来防止动态强制转换吗?
- 为什么我的阵列没有改变?快速排序尝试
- 如何改变我的链表插入函数从O(N)到O(1)