Est-ce que quelqu'un sait pourquoi il n'y a pas de fonction snwprintf
dans la bibliothèque standard C?Pourquoi C n'a pas de fonction snwprintf?
Je suis au courant de swprintf
, mais cela n'a pas la même sémantique d'une vraie, wchar_t
version de snprintf
. Pour autant que je peux dire, il n'y a aucun moyen facile à mettre en œuvre une fonction snwprintf
utilisant [v]swprintf
:
Contrairement snprintf
, swprintf
ne retourne pas la taille de la mémoire tampon nécessaire; Si le tampon fourni est insuffisant, il renvoie simplement -1. Ceci est indiscernable de l'échec dû aux erreurs d'encodage, donc je ne peux pas continuer à essayer avec des tampons progressivement plus grands en espérant qu'il finira par réussir.
Je suppose que je pourrais définir le dernier élément de la mémoire tampon comme non-NUL, appelez swprintf
, et supposons que la troncature s'est produite si cet élément est NUL par la suite. Cependant, est-ce garanti au travail? La norme ne spécifie pas l'état dans lequel le tampon doit être si swprintf
échoue. (En revanche, snprintf
décrit quels caractères sont écrits et lesquels sont supprimés.)
Je pense que vous avez raison de dire que vous ne pouvez rien supposer du contenu de la mémoire tampon quand 'swprintf' échoue. Pourriez-vous utiliser 'errno'? Je sais que cela fonctionnerait sur POSIX mais C en lui-même ne peut pas exiger 'EILSEQ' pour les erreurs de codage ...? –
@R ..: Merci. 'errno' est une idée intéressante. Je pense que si je veux une solution portable, je devrais peut-être modifier une implémentation 'vswprintf' de FreeBSD. = ( – jamesdlin
Rappelez-vous, réimplémenter une fonction printf-family est probablement une mauvaise idée, car vous ne pouvez pas garantir que vous dupliquerez toutes les fonctionnalités spécifiques à la locale –