2008-11-09 3 views
2

В проекте XCode, если я использую std::cout для записи на консоль, вывод прекрасен.std :: wcout для консольного окна в XCode

Однако, если я использую std::wcout, я не получаю выход.

Я знаю, что это сложная проблема на C++, и я пытался найти конкретное решение в случае XCode. Несколько вещей, которые я обнаружил, что это было предложено должно работать стали:


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

и


    std::setlocale(LC_ALL, ""); 

Ни один из них сделали никакой разницы. Прежде чем я уйду в отставку, потратив следующую пару недель на изучение API-интерфейсов, чтобы писать на консоль, я подумал, что я проверил бы с уважаемой аудиторией.

[Update]

Я думаю, что причина этой проблемы у меня были на самом деле делать с конкретной кодировкой некоторых строк я пытаюсь напечатать.

Если я отправляю только строковый литерал, используя L"my string" syntax, он работает! Похоже, это использует UTF32 - малое кодирование.

Однако, я смешал это со строками, которые я передал из кода Objective C++, используя кодировку NSUTF32BigEndianStringEncoding. Это сочетание кодировок, которые вызывают проблемы.

Думаю, мы можем считать этот вопрос закрытым. Спасибо за прочтение.

ответ

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

Смежные вопросы