Как объединить строки в функции m_stream в C ?

#c #logging #concatenation

#c #ведение журнала #конкатенация

Вопрос:

Я пишу регистратор для своей программы на C .

У меня есть этот фрагмент кода:

 void Log::Write(char* logline)
{
    time_t rawtime;
    struct tm * timeinfo;
    time ( amp;rawtime );
    timeinfo = localtime ( amp;rawtime );
    m_stream << asctime (timeinfo) << logline << endl;
}
  

Это журнал

Вт, 11 октября, 13:07:28 2011

Я хочу другой вывод в одной строке, например: Вт, 11 октября, 13:07:28 2011 — Это журнал

Как я могу это сделать? Спасибо!

Комментарии:

1. Я не могу понять этого. Какое значение logline ? Не похоже, что ваш вывод согласуется с вашим кодом.

2. Dont worry — это просто функция записи, logline — это входные данные.

3. Вы говорите об изменении порядка ведения журнала и отметки времени?

4. Извините. Я только что отредактировал этот пост. Я хочу увидеть это: Вт, 11 октября, 13:07:28 2011 — Это журнал и НЕТ в 2 строках.

Ответ №1:

Как сказано в документах:

Результат строки, созданный asctime, содержит ровно 26 символов и имеет вид Wed Jan 02 02:03:55 1980 n 0

Итак, если вы не хотите записывать символ окончания строки, вы можете использовать функцию use ‘write’, указывающую точное количество символов для записи следующим образом

 time_t rawtime;
struct tm * timeinfo;
time ( amp;rawtime );
timeinfo = localtime ( amp;rawtime );
m_stream.write( asctime (timeinfo), 24 );
m_stream << " - " << logline << std::endl;
  

Конечно, в этом случае вы должны написать комментарий, объясняющий, почему используется ’24’…

Комментарии:

1. Я нахожу решение, которое заменяет последний n на , более элегантным и не нуждается в комментарии, чтобы объяснить, что вы делаете.

Ответ №2:

Ваша проблема в asctime():

http://www.cplusplus.com/reference/clibrary/ctime/asctime/

 The string is followed by a new-line character ('n') and the terminating null-character.
  

Поскольку возвращаемая строка является строкой C, вы можете заменить n на :

 char * str = asctime(timeinfo);
str[strlen(str) - 1] = '';
  

ПОКА вы не вызовете ctime или asctime снова, содержимое не будет перезаписано.