在一个程序中用了两次localtime去把time_t转换为tm*,结果发现最后两个结果都一样,查看文档发现
Both the 32-bit and 64-bit versions ofgmtime, mktime, mkgmtime, and localtimeall use a single tm structure per thread for the conversion. Each call to one of these routines destroys the result of the previous call。
这些函数都是使用一个tm结构,或者是使用全局变量,或者第一次使用时动态分配,且不去管编译器的实现,但清楚的是,如果想要在同一进程中多次使得这些函数(包括相同函数和不同函数的情况),而且同时用到多个结果,必须手动将这些内容存起来
原来程序为
tm* tsStart = localtime(&ta);
tm* tsEnd = localtime(&tb);
现改为
tm tsStart;
tm* ptsEnd = localtime(&ta);
tsStart = *ptsEnd;
ptsEnd = localtime(&tb);
这里第一次调用localtime时借用了ptsEnd,下次直接还使用编译器内部的变量保存tb 后的结果,如果想更清楚一点,多定义一个tm变量也可以,我这里为了效率考虑。
本文探讨了在一个程序中使用localtime函数时遇到的问题:连续调用该函数导致结果覆盖。文章提供了修改前后的代码对比,并解释了如何避免结果被覆盖,确保能够同时使用多个转换结果。
5万+

被折叠的 条评论
为什么被折叠?



