2

在 Xcode 项目中,如果我std::cout用来写入控制台,则输出很好。

但是,如果我使用std::wcout我没有输出。

我知道这是 C++ 中的一个棘手问题,我一直在谷歌搜索以尝试在 Xcode 案例中找到特定的解决方案。我发现建议应该起作用的几件事是:

std::cout.imbue( std::locale("") );

std::setlocale(LC_ALL, "");

这些都没有任何区别。在我辞职花接下来的几周研究 facets API 以便能够写入控制台之前,我想我会在这里与尊敬的观众核实一下。

[更新]

我认为我一直遇到的问题的原因实际上与我尝试打印的一些字符串的特定编码有关。

如果我只发送一个字符串文字,使用L"my string" syntax它就可以了!看来这是使用 UTF32 - little endian encoding。

但是,我一直将它与使用 NSUTF32BigEndianStringEncoding 编码从 Objective C++ 代码传递的字符串混合。正是这种编码组合导致了问题。

我想我们可以认为这件事已经结束了。谢谢阅读。

4

1 回答 1

4

std::wcout 应该像 std::cout 一样工作。

以下在我的 MAC 上运行良好:

#include <iostream>

int main()
{
    std::cout << "HI" << std::endl;
    std::wcout << L"PLOP" << std::endl;
}

也许(尽管有些代码会很好)是因为您没有刷新缓冲区。请记住 std::cout 和 std::wcout 是缓冲的。这意味着在缓冲区被填满或您明确刷新缓冲区之前,输出不会被推送到控制台。

您可以使用以下命令刷新缓冲区:

std::wcout << flush();
// or
std::wcout << endl;  // Those also puts a '\n' on the stream.
于 2008-11-09T16:15:42.297 回答