Почему C не имеет функции snwprintf?
Кто-нибудь знает, почему в стандартной библиотеке C нет функции snwprintf
?
Я знаю swprintf
, но это не имеет той же семантики истинной версии wchar_t
snprintf
. Насколько я могу судить, нет простого способа реализовать функцию snwprintf
с помощью [v]swprintf
:
В отличие от snprintf
, swprintf
не возвращает необходимый размер буфера; если поставляемый буфер недостаточен, он просто возвращает -1. Это неотличимо от отказа из-за ошибок кодирования, поэтому я не могу продолжать повторную попытку с постепенным увеличением буферов, надеясь, что в итоге это будет успешным.
Я полагаю, что я мог бы установить последний элемент буфера как не-NUL, вызывать swprintf
и предположить, что усечение произошло, если после этого элемент равен NUL. Однако, гарантируется ли работа? В стандарте не указывается, в каком состоянии должен находиться буфер, если swprintf
терпит неудачу. (Напротив, snprintf
описывает, какие символы записаны и которые отбрасываются.)
Ответы
Ответ 1
См. ответ Ларри Джонса здесь.
По существу, в C95 был добавлен swprintf
, тогда как был добавлен в C99, и поскольку многие реализации уже вернули количество обязательных символов (для snprintf
), и это показалось полезной вещью, это было поведением который был стандартизован. Они не думали, что поведение было достаточно важным, чтобы отменить обратную совместимость с swprintf
, добавив его (который был добавлен без такого поведения несколько лет назад).