fprintf не печатает const char * в файл - PullRequest
2 голосов
/ 29 декабря 2011

У меня есть простая функция журнала, которая должна напечатать текущую дату и время.Я делаю это внутри функции, которая возвращает char *.Когда я пытаюсь установить char * в fprintf(), он не выводит мне строку в файл: почему?

Вот функция, которая создает дату и время:

char * UT::CurrentDateTime()
{
     char buffer [50];
     time_t t = time(0);   // get time now
     struct tm * now = localtime( & t ); 
     int n=sprintf(buffer, "%d:%d:%d %d:%d:%d:", (now->tm_year + 1900),
                   (now->tm_mon + 1), now->tm_mday, now->tm_hour, now->tm_min,
                   now->tm_sec);
     return buffer;
}

Вот журнал:

const char *time =__TIME__; // compilation time 
char *currentTime = UT::CurrentDateTime(); // it's a static method; also tried to set it to const
fprintf(fp, "%s %s %s %s %s %d %s\n", __TIME__, pType, __DATE__,
        currentTime, pFileName, lineNo, pMsg.c_str());
fflush(fp);

Печатается каждая вещь, кроме даты / времени char *.Почему?

1 Ответ

5 голосов
/ 29 декабря 2011
char * UT::CurrentDateTime()
{
     char buffer [50];
     /* ... */
     return buffer;
}

Вы вернули указатель на буфер памяти, который немедленно умирает. Любая функция, которая использует указатель, возвращенный из CurrentDateTime(), полагается на мусор .

Ваш компилятор должен был предупредить вас об этом. Не обращайте внимания на предупреждения компилятора на свой страх и риск.

Вместо этого, либо выделите это через char *buffer = malloc(50 * sizeof char);, либо используйте механизмы выделения памяти C ++ для выделения памяти, которая может жить дольше, чем время, когда функция «активна» и работает.

...