#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 снова, содержимое не будет перезаписано.