如何在C ++中的函数m_stream中连接字符串?

时间:2011-10-11 09:17:18

标签: c++ logging concatenation

我正在用C ++为我的程序编写一个记录器。

我有这段代码:

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

这是一个日志

Tue Oct 11 13:07:28 2011

我想在一行上输出不同的输出,如下所示: Tue Oct 11 13:07:28 2011 - 这是一个日志

我该怎么办? 谢谢!

2 个答案:

答案 0 :(得分:3)

正如docs中所述:

  

asctime产生的字符串结果恰好包含26个字符,格式为Wed Jan 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 :(得分:1)

你的问题是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,内容就不会被覆盖。