Pamiętaj, że używasz strumieni C. Strumienie C mają specjalną jakość zwaną "orientacją". Strumień jest albo nieorientowany, szeroki, albo wąski. Orientacja jest określana przez pierwsze wyjście wykonane do żadnego konkretnego strumienia (patrz http://en.cppreference.com/w/cpp/io/c na podsumowanie CI strumieni/O)
W twoim przypadku, stdout
zaczyna się niezorientowanych i wykonując pierwszy printf
, jesteś ustawienie go wąski . Po zawężeniu utknął w wąskim miejscu i nie powiodło się wprintf
(sprawdź kod powrotu!). Jedynym sposobem na zmianę strumienia C jest freopen
, który nie działa ze stdout. Właśnie dlatego 3 i 4 nie zostały wydrukowane.
Różnice między 1 a 3 są takie, że 1 jest wąską funkcją wyjściową, która wykorzystuje specyfikator konwersji wąskiego łańcucha% s: odczytuje bajty z tablicy znaków i wysyła bajty do strumienia bajtów.3 jest szeroką funkcją wyjściową z wąskim specyfikatorem konwersji łańcuchów% s: najpierw odczytuje bajty z tablicy znaków i mbtowc
s je do wchar_t
s, a następnie wysyła wchar_t
s do szerokiego strumienia, który następnie wctomb
s je do bajtów lub sekwencji wielobajtowych które następnie są wypychane do standardowego standardu z write
Wreszcie, jeśli najszerszy jest w utf16, musisz używać systemu Windows, a wszystkie zakłady są wyłączone; na tej platformie jest bardzo niewiele wsparcia dla niczego poza ASCII. Równie dobrze możesz się poddać i użyć WinAPI (możesz uzyskać standardowe C++ 11 dla niektórych rzeczy w Unicode, a nawet zrobić to wyjście C z magicznymi słowami _setmode(_fileno(stdout), _O_U16TEXT);
, które zostały omówione wystarczająco dużo razy)
Czy przeczytałeś dokumentacja? W szczególności z [cstdio] (http://www.cplusplus.com/reference/cstdio/)? –
"widestr jest w utf16" oznacza, że używasz systemu Windows (więcej systemów przyjaznych Unicode używa UTF-32 jako domyślnego dla szerokich ciągów znaków). Istnieje wiele tajemniczych obręczy do skakania, jeśli chcesz zrobić coś poza ASCII w systemie WIndows używając standardowego C++ lub C. Równie dobrze możesz się poddać i użyć WinAPI. – Cubbi
NIE PODAWAJ DO GŁUPOŚCI MICROSOFT. Oszczędź sobie bólu i napisz własną bibliotekę ciągów. Z miłości do Boga NIE używaj makr w Windows i innych szaleństw, uwierz mi, to straszne, aw zamieszaniu pojawiają się wszelkiego rodzaju błędy. – Owl