Как получить текущее время в c

void takeTime(struct tm * timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    timeNow = localtime(&timeInSec);    
    return;
}

int main() 
{
    struct tm* timeNow;
    takeTime(timeNow);
    printf("%s\n", asctime(timeNow));
    return 0;
}

Попытался выполнить код, но получил ошибку сегментации, может ли кто-нибудь объяснить, почему. я новичок в программировании!

Вопросы, требующие помощи в отладке, как правило, должны предоставлять минимальный воспроизводимый пример проблемы, который включает все #include директивы. Это позволяет другим людям легко тестировать вашу программу, просто используя копирование и вставку.

Andreas Wenzel 10.01.2023 19:07

Barmar 10.01.2023 19:07

В MSVC есть список различных функций управления временем

Weather Vane 10.01.2023 19:11
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
0
3
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция localtime возвращает указатель на статически выделенную структуру.

Код в вопросе изменяет локальную копию указателя timeNow в takeTime, но значение не возвращается вызывающей стороне.

Если вы хотите передать указатель вызывающей стороне, вам нужно эмулировать ссылку, используя другой уровень косвенности, то есть указатель на указатель.

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

void takeTime(struct tm ** timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    *timeNow = localtime(&timeInSec);    
    // This return at the end of a void function can be removed
    // return;
}

int main(void) 
{
    struct tm* timeNow;
    takeTime(&timeNow);
    printf("%s\n", asctime(timeNow));
    return 0;
}

Или вы можете захотеть получить копию этой структуры. Затем вам нужна структурная переменная в main и вы должны передать ее адрес.

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

void takeTime(struct tm * timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    *timeNow = *localtime(&timeInSec);    
    // This return at the end of a void function can be removed
    // return;
}

int main(void) 
{
    struct tm timeNow;
    takeTime(&timeNow);
    printf("%s\n", asctime(&timeNow));
    return 0;
}

Или вы можете вернуть указатель

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

struct tm * takeTime(void)
{
    time_t timeInSec;
    time(&timeInSec);

    return localtime(&timeInSec);    
}

int main() 
{
    struct tm* timeNow;
    timeNow = takeTime();
    printf("%s\n", asctime(timeNow));
    return 0;
}

Другой вариант возврата структуры и более подробное объяснение были показаны в ответе Фархода Нематова , который, к сожалению, был удален.

Другие вопросы по теме