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