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