C ++ изменить символ внутри функции - PullRequest
1 голос
/ 11 июня 2019

Я создал функцию для получения даты из esp32 с помощью c ++.Но это вызывает ошибку.

Я вижу десятки сайтов, и ни одно из решений мне не помогло.Код может измениться к лучшему, если вы предоставите его.

Идея есть.создайте функцию для возврата DateTime в char.

void getCurrentDateTime(char **datetime){
  time_t tt = time(NULL);
  data = *gmtime(&tt);
  strftime(datetime, 64, "%m/%d/%Y %H:%M:%S", &data);
}

Я вызываю эту функцию таким образом.

char *datetime; 
getCurrentDateTime(&datetime);  // my function

Код компилируется, но происходит сбой устройства esp32 ...

Я в самом начале c ++код ... так что я ценю, если вы объясните и предоставите код для функции и как ее вызвать.

Ответы [ 3 ]

2 голосов
/ 11 июня 2019

Сначала вы должны инициализировать datetime и передать его как char* функции.

#include <ctime>

void getCurrentDateTime(char* datetime){
    time_t tt = time(NULL);
    tm data = *gmtime(&tt);
    strftime(datetime, 64, "%m/%d/%Y %H:%M:%S", &data);
}

int main() {
    char datetime[64];
    getCurrentDateTime(datetime);
}
0 голосов
/ 11 июня 2019

вам нужно инициализировать указатель dateTime. Нет выделенной памяти, на которую указывает указатель datetime. поэтому, когда strftime пытается заполнить его, происходит сбой. инициализировать его с каким-то предопределенным объемом памяти * 1004

char *datetime = new char(80); 
getCurrentDateTime(&datetime);

обновление: также strftime принимает char* в качестве первого параметра, но вы передаете char**

0 голосов
/ 11 июня 2019
strftime(*datetime, 64, "%m/%d/%Y %H:%M:%S", &data);

Без дальнейшего тестирования я бы сказал, что это так, потому что вам нужно разыменовать ваш «указатель ссылки».

Ваша дата-время указывается как «указатель на символ []», а затем вы пытаетесь распечататьуказатель вместо символа []

...