ctime
использует статически выделенный буфер определенного размера, поэтому ваша первая проблема в том, что вы добавляете эту строку, не зная размера.
TIMESTRING[24]=' ';
Это может вызвать segfault сам по себе, если размер буфера составляет всего 24 байта. Другая причина может заключаться в том, что если нулевое завершение происходит с индексом 24, вы просто сделали строку без определения, и fprintf
продолжит чтение, пока не достигнет памяти, которую не разрешено читать, что приведет к ошибке segfault.
Используйте ctime_r
с предварительно выделенным буфером, если вы хотите изменить его, и убедитесь, что буфер достаточно велик для хранения ваших данных и завершается нулем после того, как вы закончите с ним. Если ctime_r
недоступен, сделайте strncpy
в свой буфер перед изменением.
НТН
РЕДАКТИРОВАТЬ
Я не совсем уверен, что именно вы пытаетесь сделать, но, предполагая, что код, который вы разместили, взят непосредственно из вашего приложения, вы, вероятно, действительно хотите сделать это:
TIMEVAL = time(NULL);
char* TIMESTRING = ctime(&TIMEVAL);
fprintf(LOG, "[ %20s ] ", TIMESTRING);
То есть, добавьте строку времени. Просто добавьте пробел в строку форматирования, а не в буфер строки времени.