fxmzssy
2017-12-13 08:25
采纳率: 100%
浏览 2.0k
已采纳

time_t和struct tm转换问题

问一个比较基础的代码问题,我写了以下代码

 #include <stdio.h>
#include <time.h>
#include <stdlib.h>

int testTime(time_t* time_tmp,struct tm* convertRes){
    convertRes = localtime(time_tmp);
    return 1; 

}
int main(){
    time_t t;
    struct tm* p;
    p = (struct tm*) malloc(sizeof(struct tm));
    t=time(NULL);
    //p = localtime(&t);
    printf("%d-%02d-%02d ",(p->tm_year), (p->tm_mon),p->tm_mday);
  printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec); 
    t = t+20;
    testTime(&t,p);
    printf("%d-%02d-%02d ",(p->tm_year), (p->tm_mon),p->tm_mday);
  printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec); 
  return 0;
}

本想在函数testTime中做一下时间类型转换,但是发现一个问题,此段代码输出结果为:

0-00-00 00:00:00

0-00-00 00:00:00

显然不是我想要的结果,函数testTime没有起作用,但是如果 //p = localtime(&t);这行注释去掉,则输出结果为:

117-11-13 16:05:30

117-11-13 16:05:50

这样结果就是对的,函数testTime就起作用,不是很明白为什么,难道入参有问题吗?希望各位大侠帮忙解惑

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • fuchouzhe 2017-12-13 10:14
    已采纳

    localtime返回值是一个全局指针,你不用把返回值付给p

    点赞 打赏 评论
  • 单黄勇 2017-12-13 08:29

    p你只是指向了一块初始化的内存,里面是空的啊 当然是0了

    点赞 打赏 评论
  • abc3065369 2017-12-13 09:08

    你应该用二级指针去接收localtime的地址

    点赞 打赏 评论
  • blownewbee 2017-12-13 10:10
    点赞 打赏 评论
  • lxy923 2017-12-13 12:26

    把malloc去掉试下,localtime不需要分配内存的
    应该是指针乱了

    点赞 打赏 评论
  • happer_xc 2017-12-13 15:44

    int testTime(time_t* time_tmp,struct tm** convertRes){
    *convertRes = localtime(time_tmp);
    return 1;

    }
    int main(){
    time_t t;
    struct tm* p;
    p = (struct tm*) malloc(sizeof(struct tm));
    t=time(NULL);
    //p = localtime(&t);
    printf("%d-%02d-%02d ",(p->tm_year), (p->tm_mon),p->tm_mday);
    printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec);
    t = t+20;
    testTime(&t,&p);
    printf("%d-%02d-%02d ",(p->tm_year), (p->tm_mon),p->tm_mday);
    printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec);
    return 0;
    }

    点赞 打赏 评论

相关推荐 更多相似问题