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

std::endl in a string variable?

您好,我想在字符串中保存多行。我得到了一个字符串日志字符串,我想保存多人游戏错误日志,稍后我可以将其打印在 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
...

是否可以这样得到它,还是我必须单独打印所有行?

这不可能。使用 logstring += "\n"; 代替

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

如果您在 'text-mode' 中打开文件,您的操作系统应将 \n 替换为正确的平台特定行尾字符(序列)。所以简单地附加一个 \n 应该没问题。 Portable end of line (newline)

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

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

如果您只是想要换行,\n,请使用 + 将它们添加到您的字符串中,或​​者使用 << '\n'.

将它们流式传输到流中

例如,

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

要分隔字符串中的行,您应该使用换行符 '\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,如果您以某种方式这样做,它就没有意义。