¿Alguien sabe por qué no hay snwprintf
función snwprintf
en la biblioteca estándar de C?
Soy consciente de swprintf
, pero eso no tiene la misma semántica de una versión verdadera, wchar_t
de snprintf
. Por lo que puedo decir, no hay una manera fácil de implementar una función snwprintf
usando [v]swprintf
:
A diferencia de snprintf
, swprintf
no devuelve el tamaño de búfer necesario; Si el búfer suministrado es insuficiente, simplemente devuelve -1. Esto es indistinguible del fracaso debido a errores de encoding, por lo que no puedo seguir intentando con buffers cada vez más grandes con la esperanza de que finalmente tenga éxito.
Supongo que podría configurar el último elemento del búfer para que no sea NUL, llamar a swprintf
, y asumir que se produjo un truncamiento si ese elemento es NUL después. Sin embargo, ¿está garantizado que funcione? El estándar no especifica en qué estado debería estar el búfer si falla swprintf
. (Por el contrario, snprintf
describe qué caracteres se escriben y cuáles se descartan).
Vea la respuesta dada por Larry Jones aquí .
Esencialmente, swprintf
se agregó en C95, mientras que snprintf
se agregó en C99 y dado que muchas implementaciones ya devolvieron el número de caracteres requeridos (para snprintf
) y parecía algo útil de hacer, ese fue el comportamiento que se estandarizó. No pensaron que el comportamiento fuera lo suficientemente importante como para romper la compatibilidad con swprintf
al agregarlo (que se agregó sin ese comportamiento varios años antes).