Как объединить строки в функции m_stream в C ++? - PullRequest
0 голосов
/ 11 октября 2011

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

У меня есть этот кусок кода:

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

Это журнал

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

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

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

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

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

Строковый результат, полученный asctime, содержит ровно 26 символов и имеет форму Ср Ян 02 02:03:55 1980 \ n \0

Так что, если вы не хотите писать символ окончания строки, вы можете использовать функцию 'write', определяющую точное количество символов для записи, как это

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

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

1 голос
/ 11 октября 2011

Ваша проблема 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 на \ 0:

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

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

...