字符串变量中的std :: endl?

时间:2017-06-19 10:57:52

标签: c++ string std endl

您好我想在字符串中保存多个行。我有一个字符串logstring,我想保存多重播放错误日志,我以后可以在txt文件或控制台输出中打印。是否有可能使用endl格式化字符串变量?我搜索了互联网,但我只找到

cout << "" << endl;

现在我的想法是:

std::string logstring;
logstring = logstring + "Error Message" + "Number" + "Time + Date";
logstring += endl;

这样的事情是可能的还是没有办法格式化字符串变量?后来我想将它们打印到log.txt文件中?是否可以使用这样的字符串?

std::ofstream logfile;
logfile.open(log.txt);
logfile << logstring;

文本文件应如下所示

Error Message 1 Date
Error Message 2 Date
Error Message 3 Date
...

是否可能这样做或者我必须单独打印所有行?

4 个答案:

答案 0 :(得分:1)

不要忘记std::endl添加新行刷新缓冲区。

如果您只是想要新的行\n,请使用+将其添加到字符串中,或​​使用<< '\n'将其流式传输到流中。

例如,

std::string logstring;
logstring = logstring + "Error Message" + "Number" + "Time + Date";
logstring += '\n';

答案 1 :(得分:0)

这是不可能的。请改用logstring += "\n";

答案 2 :(得分:0)

std::endl不仅仅是\n(换行符)字符,但它也会刷新流。

如果您在文本模式&#39;中打开了文件,则您的操作系统应使用正确的平台特定行尾字符(序列)替换\n。所以简单地追加一个\n应该没问题。 Portable end of line (newline)

另请注意,默认情况下,使用msvc在文本模式中打开标准输入和输出。

答案 3 :(得分:0)

要分隔字符串中的行,您应该使用新的换行符'\n'

例如

std::string logstring;

//...

logstring += "Error Message 1 Date";
logstring += '\n';

logstring += "Error Message 2 Date";
logstring += '\n';

logstring += "Error Message 3 Date";
logstring += '\n';

对于std::endl,它是一个声明为

的函数
template <class charT, class traits>
basic_ostream<charT, traits>& endl(basic_ostream<charT, traits>& os);

这是一个所谓的流操纵器。这个陈述中的例子

std::cout << std::endl;

使用operator <<接受指向函数的指针作为参数。

你不能将一个字符串与函数指针std::endl连接起来,如果你以某种方式这样做就没有意义了。