我正在用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 - 这是一个日志
我该怎么办? 谢谢!
答案 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,内容就不会被覆盖。