¿Alguien sabe por qué no hay una función snwprintf
en la biblioteca estándar C?¿Por qué C no tiene una función snwprintf?
Soy consciente de swprintf
, pero que no tiene la misma semántica de una verdadera versión, wchar_t
de snprintf
. Por lo que yo puedo decir, no hay una manera fácil de implementar una función de snwprintf
usando [v]swprintf
:
A diferencia snprintf
, swprintf
no devuelve el tamaño del búfer necesario; si el buffer proporcionado es insuficiente, simplemente devuelve -1. Esto es indistinguible de la falla debido a errores de codificación, por lo que no puedo volver a intentar con búferes progresivamente más grandes con la esperanza de que finalmente tenga éxito.
Supongo que podría establecer que el último elemento del búfer no sea NUL, llame al swprintf
, y suponga que se produjo el truncamiento si ese elemento es NUL después. Sin embargo, ¿está garantizado que funcione? El estándar no especifica en qué estado debe estar el búfer si falla el swprintf
. (Por el contrario, snprintf
describe qué caracteres se escriben y cuáles se descartan.)
Creo que tiene razón en que no puede asumir nada sobre el contenido del búfer cuando 'swprintf' falla. ¿Podrías usar 'errno'? Sé que funcionaría en POSIX, pero C por sí mismo puede no requerir 'EILSEQ' para codificar errores ...? –
@R ..: Gracias. 'errno' es una idea interesante. Creo que si quiero una solución portátil, tendré que modificar una implementación real de 'vswprintf' de FreeBSD. = ( – jamesdlin
Tenga en cuenta que volver a implementar una función printf-family probablemente sea una mala idea, ya que no puede garantizar que duplique todas las funciones específicas de la configuración regional. –