¿Por qué no printf formatea los parámetros de Unicode?

Cuando se utiliza printf para formatear una cadena de doble byte en una cadena de un solo byte:

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

Claramente, algunos caracteres no pueden representarse como caracteres ascii, por lo que a veces he visto comportamientos en los que los caracteres de doble byte se convierten en '?' marca el caracter Pero, esto parece depender de los caracteres particulares. Para el printf anterior, la salida es:

<code>s:\
</code>

Esperaba poder obtener algo como:

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

Me temo que he perdido el ejemplo, pero creo que para una cadena cuando encontró caracteres Unicode, reemplazó la primera con un '?' y luego renunció al resto.

Entonces, mi pregunta es, ¿qué se supone que sucederá cuando formatee una cadena ancha en una cadena de un solo byte? Documentación aquí:http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx dice "Los caracteres se muestran hasta el primer carácter nulo". Pero, no estoy viendo eso. ¿Es esto un error en printf, o es el comportamiento que estoy viendo documentado en alguna parte, si es así, dónde?

Gracias por tu ayuda.

ACTUALIZAR

Gracias por las respuestas de las personas que me ofrecen alternativas al uso de printf. Voy a cambiar a una alternativa, pero estoy realmente interesado por curiosidad por qué printf no tiene un comportamiento documentado confiable. Parece casi como si el implementador se esforzara por hacer que esto no funcionara.

Respuestas a la pregunta(2)

Su respuesta a la pregunta