Dlaczego nie drukuje parametrów Unicode?

Podczas używania printf do sformatowania dwubajtowego ciągu znaków w ciąg jednobajtowy:

<code>printf("%ls\n", L"s:\\яшертыHello");   // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
</code>

Oczywiście niektóre znaki nie mogą być reprezentowane jako znaki ascii, więc czasami widziałem zachowanie, w którym znaki dwubajtowe zamieniają się w „?” znak postaci. Ale wydaje się, że zależy to od konkretnych postaci. Dla powyższego printf dane wyjściowe to:

<code>s:\
</code>

Miałem nadzieję, że dostanę coś takiego:

<code>s:\??????Hello
</code>

Obawiam się, że zgubiłem przykład, ale myślę, że dla jednego ciągu znaków, gdy napotkał znaki Unicode, zastąpiłem pierwszy ciąg „?” a potem zrezygnował z reszty.

Tak więc moje pytanie brzmi: co powinno się wydarzyć, gdy sformatujesz szeroki łańcuch znaków w łańcuch jednobajtowy. Dokumentacja tutaj:http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx mówi „Znaki są wyświetlane do pierwszej wartości zerowej”. Ale tego nie widzę. Czy jest to błąd w printf, czy jest to zachowanie, które gdzieś widzę, jeśli tak, to gdzie.

Dzięki za pomoc.

AKTUALIZACJA

Dziękuję za odpowiedzi od ludzi dających mi alternatywę do używania printf. Zamieniam się na alternatywę, ale naprawdę interesuje mnie ciekawość, dlaczego printf nie ma wiarygodnego udokumentowanego zachowania. Wygląda to tak, jakby jego wykonawca zrobił wszystko, aby to nie zadziałało.

questionAnswers(2)

yourAnswerToTheQuestion