2008-11-09 59 views
2

在一个XCode项目中,如果我使用std::cout来写入控制台,输出很好。std :: wcout到XCode的控制台窗口

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

我知道这是C++中的一个棘手问题,我一直在使用Google搜索以在XCode案例中寻找特定的解决方案。一对夫妇的事情,我发现,有人建议应该进行的工作:


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


    std::setlocale(LC_ALL, ""); 

这些都不作出任何区别。在我辞职之前,我花了接下来的几个星期研究API方面的知识,以便能够写入控制台,我想我会在这里检查尊敬的听众。

[更新]

我觉得我一直有这个问题的原因其实是一些我想要打印的字符串的特定编码做。

如果我只发送一个字符串文字,使用L"my string" syntax它的作品!看来这是使用UTF32 - 小端编码。

但是,我一直在使用NSUTF32BigEndianStringEncoding编码将这个与我从Objective C++代码传递过来的字符串混合在一起。这是导致问题的编码混合。

我想我们可以考虑关闭这件事。谢谢阅读。

回答

3

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. 
+0

感谢您的答复。我想我已经找到了我的问题的原因 - 现在更新我的问题... – philsquared 2008-11-09 16:21:42