#c #c
#c #c
Вопрос:
Я пытаюсь предотвратить повторное создание колеса. Я анализирую входной файл, в котором время является одним из значений. Мне нужна структура данных для хранения всех значений входного файла, и вместо создания пользовательской структуры для поля time я хочу просто использовать struct tm из ctime.
Однако я сталкиваюсь со странной ошибкой, так что, надеюсь, кто-нибудь из вас сможет мне помочь. Вот мой тестовый код (для подтверждения концепции):
#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. Если есть ответ, который решает вашу проблему, вы должны нажать, чтобы принять его.
2. Я опубликовал сообщение в конце рабочего дня, поэтому я только сейчас возвращаюсь, чтобы проверить ответы.
Ответ №1:
Вам нужно разместить структуру либо в стеке, либо в куче с помощью 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;
}
Комментарии:
1. Я знал, что это будет что-то простое. Конечно, это все еще не объясняет, почему это работает, когда сначала объявляется «time_t seconds».