Подтвердить что ты не робот

Почему C не имеет функции snwprintf?

Кто-нибудь знает, почему в стандартной библиотеке C нет функции snwprintf?

Я знаю swprintf, но это не имеет той же семантики истинной версии wchar_t snprintf. Насколько я могу судить, нет простого способа реализовать функцию snwprintf с помощью [v]swprintf:

В отличие от snprintf, swprintf не возвращает необходимый размер буфера; если поставляемый буфер недостаточен, он просто возвращает -1. Это неотличимо от отказа из-за ошибок кодирования, поэтому я не могу продолжать повторную попытку с постепенным увеличением буферов, надеясь, что в итоге это будет успешным.

Я полагаю, что я мог бы установить последний элемент буфера как не-NUL, вызывать swprintf и предположить, что усечение произошло, если после этого элемент равен NUL. Однако, гарантируется ли работа? В стандарте не указывается, в каком состоянии должен находиться буфер, если swprintf терпит неудачу. (Напротив, snprintf описывает, какие символы записаны и которые отбрасываются.)

4b9b3361

Ответ 1

См. ответ Ларри Джонса здесь.

По существу, в C95 был добавлен swprintf, тогда как был добавлен в C99, и поскольку многие реализации уже вернули количество обязательных символов (для snprintf), и это показалось полезной вещью, это было поведением который был стандартизован. Они не думали, что поведение было достаточно важным, чтобы отменить обратную совместимость с swprintf, добавив его (который был добавлен без такого поведения несколько лет назад).