2008-11-09 61 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