Domanda

In un progetto XCode, se uso std :: cout per scrivere sulla console, l'output va bene.

Tuttavia, se uso std :: wcout non ottengo alcun output.

So che questo è un problema spinoso in C ++ e ho cercato su Google di cercare una soluzione specifica nel caso XCode. Un paio di cose che ho scoperto che è stato suggerito dovrebbero funzionare sono:


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

e


    std::setlocale(LC_ALL, "");

Nessuno di questi ha fatto alcuna differenza. Prima di rassegnarmi a trascorrere le prossime due settimane a studiare l'API delle sfaccettature solo per poter scrivere sulla console, ho pensato di controllare con la stima audace qui.

[Aggiornamento]

Penso che il motivo del problema che sto avendo sia in realtà a che fare con la codifica specifica di alcune delle stringhe che sto cercando di stampare.

Se invio solo una stringa letterale, usando L " my string " sintassi funziona! Sembra che questo stia usando UTF32 - codifica little endian.

Tuttavia, lo sto mescolando con le stringhe che sono state passate dal codice Objective C ++ usando la codifica NSUTF32BigEndianStringEncoding. È questo mix di codifiche che sta causando i problemi.

Penso che possiamo considerare chiusa questa questione. Grazie per aver letto.

È stato utile?

Soluzione

std :: wcout dovrebbe funzionare proprio come std :: cout.

Quanto segue funziona perfettamente sul mio MAC:

#include <iostream>

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

Forse (anche se un po 'di codice sarebbe stato carino) è perché non stai scaricando il buffer. Ricorda che std :: cout e std :: wcout sono bufferizzati. Ciò significa che l'output non verrà inviato alla console fino a quando il buffer non viene riempito o non si scarica esplicitamente il buffer.

Puoi svuotare il buffer con:

std::wcout << flush();
// or
std::wcout << endl;  // Those also puts a '\n' on the stream.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top