除非首先声明time_t,否则程序在使用struct tm时会崩溃

时间:2011-04-25 20:16:54

标签: c++ c

我试图阻止重新创建车轮。我正在解析一个时间作为其中一个值的输入文件。我需要一个数据结构来保存输入文件的所有值,而不是为时间字段创建自定义结构,我只想使用来自ctime的struct tm。

我遇到了一个奇怪的错误,所以希望你们中的一个可以帮助我。这是我的测试代码(用于我的概念证明):

#include <ctime>
#include <cstdio>

int main()
{

int Oldhour = 16;
int OldSecond = 25;
int OldMinute = 20;

time_t seconds;

struct tm * timeinfo;

timeinfo->tm_hour = Oldhour;
timeinfo->tm_min = OldMinute;
timeinfo->tm_sec = OldSecond;


int hour, min, sec;

hour = timeinfo->tm_hour;
min = timeinfo->tm_min;
sec = timeinfo->tm_sec;

printf("%d:%d:%d", hour, min, sec);

return 0;
}

这编译得很好,它完全符合我的要求并打印“16:20:25”所以它以我想要的方式存储信息。但是,如果我删除行“time_t seconds;”它立刻崩溃了。

1 个答案:

答案 0 :(得分:6)

您需要使用malloc在堆栈或堆上分配结构。具体来说,您要声明一个指向结构的指针,而不为其分配任何存储空间。

试试这个:

#include <ctime>
#include <cstdio>

int main()
{

int Oldhour = 16;
int OldSecond = 25;
int OldMinute = 20;

time_t seconds;

struct tm timeinfo;

timeinfo.tm_hour = Oldhour;
timeinfo.tm_min = OldMinute;
timeinfo.tm_sec = OldSecond;


int hour, min, sec;

hour = timeinfo.tm_hour;
min = timeinfo.tm_min;
sec = timeinfo.tm_sec;

printf("%d:%d:%d", hour, min, sec);

return 0;
}