У меня проблема с простой функцией (я думаю, из-за неправильного указания указателя). Как функция strptime
(функция, которая берет строку и возвращает struct tm
со всем набором данных), нет в Windows, я создал функцию strptime, вызвав другие базовые рабочие функции.указатель на struct tm variable, не может вернуть изменения
Вот тестовый код. Внутри функции STRPTIME время хорошо установлено, а затем в основном я теряю информацию.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void STRPTIME(char *strtm, struct tm *tminfo)
{
time_t rawtime;
int day, month, year;
sscanf(strtm, "%d-%d-%d\n", &year, &month, &day);
time(&rawtime);
tminfo = localtime(&rawtime);
tminfo->tm_year = year - 1900;
tminfo->tm_mon = month - 1;
tminfo->tm_mday = day;
mktime(tminfo);
printf("date %d-%d-%d\n", tminfo->tm_year, tminfo->tm_mon, tminfo->tm_mday);
}
int main()
{
char stm[11];
struct tm tminfo;
strcpy(stm, "2015-12-31");
STRPTIME(stm, &tminfo);
printf("tminfo %d-%d-%d\n", tminfo.tm_year, tminfo.tm_mon, tminfo.tm_mday);
return(0);
}
вы совершенно правы !! Я не думал об этом! 'if' - это проверка, чтобы быть уверенным, что localtime возвращает не' NULL', а вход 'NULL', верно? – Stefano
Кстати, это решение хорошее, чтобы обогнать проблему strptime, или есть что-то более странное и, прежде всего, быстрее? – Stefano
Да, 'if' гарантирует, что и результат' localtime', и аргумент функции не являются 'NULL', так как два аргумента' memcpy' не должны быть 'NULL'. Поскольку ваша версия 'strptime' не имеет аргумента' format', это не совсем эквивалентно. Так ли это «достаточно хорошо», вероятно, зависит от вашего варианта использования. См. Также [этот вопрос] (http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows). – DarkDust