Почему в C нет функции snwprintf? - PullRequest
11 голосов
/ 12 сентября 2010

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

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

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

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

1 Ответ

4 голосов
/ 12 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...