在 Xcode 项目中,如果我使用 std::cout
写入控制台输出很好。
但是,如果我使用 std::wcout
我没有得到任何输出。
我知道这是 C++ 中的一个棘手问题,我一直在谷歌上搜索以尝试在 Xcode 案例中找到特定的解决方案。我发现建议应该有效的一些事情是:
std::cout.imbue( std::locale("") );
和
std::setlocale(LC_ALL, "");
这些都没有任何区别。在我决定花接下来的几周时间研究 Facets API 以便能够向控制台写入内容之前,我想我应该向这里尊敬的观众咨询一下。
[更新]
我认为我遇到的问题的原因实际上与我尝试打印的一些字符串的特定编码有关。
如果我只发送一个字符串文字,使用 L"my string" syntax
有用!看来这是使用 UTF32 - 小端编码。
但是,我一直将其与使用 NSUTF32BigEndianStringEncoding 编码从 Objective C++ 代码传递的字符串混合在一起。正是这种混合编码导致了问题。
我认为我们可以考虑结束此事。感谢您的阅读。
最佳答案
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.
关于c++ - std::wcout 到 Xcode 中的控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276010/