【问题标题】:C++ cout or wcout a string contain "\n" isn't split the linesC++ cout 或 wcout 包含“\n”的字符串不拆分行
【发布时间】:2017-04-10 07:31:12
【问题描述】:

C++11 和编译器是 TDM-GCC。

我通过 WinAPI 制作了一个 ini 文件并从中读取字符串(UCS-2 LE BOM), GetPrivateProfileStringW。

[String]
Example = Today\nYesterday\nApple

我的函数库将返回一个变量 std::wstring。它看起来不错。 然后使用 wcout,就像:

#include <iostream>
#include <string>

using namespace std;
wstring readString = GetPrivateProfileStringW();    // Hide the details.
wcout << readString << endl;

我在屏幕上看到了什么:

Today\nYesterday\nApple

我想要什么:

Today
Yesterday
Apple

我不确定为什么“\n”在这种情况下不起作用。

为了避免这种情况,我可以创建多个 INI 键并使用“endl”来计算它们。

但是在这个项目中,这里有多少行应该是动态的。

如何从屏幕上的 Windows API 中找出单个字符串变量,变成多行?

【问题讨论】:

  • "\n" 由编译器转换,而不是wcout。您的 INI 文件未通过编译器传递。字符是逐字写的。这是预期的行为。如果你想要换行,你将不得不自己解析字符串。
  • @IInspectable 谢谢你,我会听从你的建议的。

标签: string c++11 winapi cout tdm-gcc


【解决方案1】:

序列\n 仅被源代码中的编译器 识别为文字字符串或字符的一部分。它不是内置在库或任何标准函数中的任何东西。

如果您希望序列表示您从外部源读取的输入中的换行符,则必须自己处理。

【讨论】:

  • 似乎这比我想象的要复杂。谢谢你。也许找一些代码库是个好主意……
  • @2BEmperor 就像用实际的换行符 '\n' 替换字符串 "\\n" 一样简单
  • 一点也不。我知道 \\n 来自其他编程语言 python 等。不是我,Windows API 添加了 \\.我想我应该在INI中添加一些特殊标记,并在源代码中将它们替换为\n。
  • @2BEmperor 不是双反斜杠作为路径分隔符,而是因为如果您查找 "\n",编译器会将其替换为换行符,而您不会找到。您必须转义反斜杠,以便编译器实际搜索实际的反斜杠字符,后跟'n'。尝试例如std::cout &lt;&lt; "hello\\nworld" 看看你会得到什么。
  • 谢谢! \\n 到 \n 的转换功能就完成了!???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多