Chinaunix

标题: time_t转成字符串问题 [打印本页]

作者: wuzen007    时间: 2013-11-27 15:51
标题: time_t转成字符串问题
程序如下所示:
time_t begin_time,end_time;
begin_time = time(NULL);
end_time = begin_time+100;
struct tm *local = NULL;
struct tm *end = NULL;
char begin_tm[20]={0},end_tm[20]={0};
local = localtime(&begin_time);
end = localtime(&end_time);
strftime(begin_tm,20,"%Y%m%d%H%M%S",local);
strftime(end_tm,20,"%Y%m%d%H%M%S",end);
cout << "开始时间:" << begin_tm << "结束时间:" << end_tm <<endl;
打印出来发现,begin_tm 和 end_tm 居然是一样的,如果单独打印一个的话则都是正确的,想问下程序哪些写的有问题?

作者: 井蛙夏虫    时间: 2013-11-27 18:00
回复 1# wuzen007
localtime不是可重入的,用localtime_r吧
man localtime可以看到说明


   
作者: wuzen007    时间: 2013-11-27 18:39
看到了还真不知道原来是这样,多问下为什么会是不可重入呢
回复 2# 井蛙夏虫


   
作者: bruceteen    时间: 2013-11-28 08:15
struct tm *local = NULL;
struct tm *end = NULL;
local = localtime(&begin_time);
end = localtime(&end_time);

改为

struct tm local = *localtime(&begin_time);
struct tm end = *localtime(&end_time);

作者: wuzen007    时间: 2013-11-28 08:43
这样子写主要是什么区别呢
回复 4# bruceteen


   
作者: core1011    时间: 2013-11-28 09:05
回复 5# wuzen007

地址与值的区别吧

   
作者: idi0t    时间: 2013-11-28 09:30
localtime里好像使用了static 局部变量,指所以是不可重入的吧。还是按2楼说的用localtime_r吧,localtime多线程下都不安全。类似这样的函数还有不少,是要注意下。
作者: syre    时间: 2013-11-28 09:56
基本上,输出是通过返回个指针,而内存又不是你分配的就需要注意了。多半都不是线程安全的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2