当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 一个linux c的问题,大家请帮忙。
帖子发表于 : 2010-03-03 13:23 

注册: 2010-01-21 21:18
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct tm *tm_ptr, timestruct;
time_t the_time;
char buf[256];
char *result;

(void) time(&the_time);
tm_ptr = localtime(&the_time);
strftime(buf, 256, “%A %d %B, %I:%S %p”, tm_ptr);

printf(“strftime gives: %s\n”, buf);

strcpy(buf,”Thu 26 July 2007, 17:53 will do fine”);

printf(“calling strptime with: %s\n”, buf);
tm_ptr = &timestruct;

result = strptime(buf,”%a %d %b %Y, %R”, tm_ptr);
printf(“strptime consumed up to: %s\n”, result);

printf(“strptime gives:\n”);
printf(“date: %02d/%02d/%02d\n”,
tm_ptr->tm_year % 100, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf(“time: %02d:%02d\n”,
tm_ptr->tm_hour, tm_ptr->tm_min);
exit(0);
}


下面是运行结果
strftime gives: Saturday 09 June, 08:16 AM
calling strptime with: Thu 26 July 2007, 17:53 will do fine
strptime consumed up to: will do fine
strptime gives:
date: 07/07/26
time: 17:53

下面是我不明白的地方
tm_ptr = &timestruct;不明白干什么用的,把这个语句去掉了运行结果也是一样,感觉timestruct就没什么用,哪个兄弟明白帮解答一下。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 一个linux c的问题,大家请帮忙。
帖子发表于 : 2010-03-04 10:26 

注册: 2010-01-21 21:18
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
看来这个帖子没办法结贴了。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 一个linux c的问题,大家请帮忙。
帖子发表于 : 2010-03-04 10:36 

注册: 2009-10-30 11:25
帖子: 4
送出感谢: 0 次
接收感谢: 0 次
tm_ptr = &timestruct;
作用是把指针指向timestruct。因为tm_ptr这个指针在定义完并未初始化,即野指针,如果指针指向非法区域,会造成系统崩溃。这个步骤作用就是把指针指向已分配的一个区域。运行结果一样并不代表这样写没有隐患。 :em01


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 一个linux c的问题,大家请帮忙。
帖子发表于 : 2010-03-04 14:15 

注册: 2010-01-21 21:18
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
yongsunshine 写道:
tm_ptr = &timestruct;
作用是把指针指向timestruct。因为tm_ptr这个指针在定义完并未初始化,即野指针,如果指针指向非法区域,会造成系统崩溃。这个步骤作用就是把指针指向已分配的一个区域。运行结果一样并不代表这样写没有隐患。 :em01



前面有这句话tm_ptr = localtime(&the_time);不是把指针指向一个分配的区域吗。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 一个linux c的问题,大家请帮忙。
帖子发表于 : 2010-03-04 15:01 

注册: 2008-11-01 21:42
帖子: 1028
地址: 树下板凳
送出感谢: 0 次
接收感谢: 1
localtime的实现有点特殊 ,用了static 变量,所以不存在野指针问题,没用到malloc或者new,也不需要释放.tm_ptr开始时指向localtime(&the_time)返回的静态内存,tm_ptr = &timestruct;后tm_ptr指向timestruct ,注意这两个函数的不同!strptime 和strftime
strftime把tm_ptr(指向localtime(&the_time)) 格式化后写入buf
strftime把buf格式化后重新写入到tm_ptr
所以没有tm_ptr = &timestruct;这句话 打印出来的事之前静态内存中的值
有这句话是把用buf格式化的timestruct打印出来,估计是lz没有看清这两个函数的区别

//大概是这样实现的
struct tm *localtime( const time_t *time )
{
static struct tm _tm;
...
return &_tm;
}


_________________
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译