Обработка ошибок размера буфера в strftime: ERANGE против EOVERFLOWLinux

Ответить
Anonymous
 Обработка ошибок размера буфера в strftime: ERANGE против EOVERFLOW

Сообщение Anonymous »

У меня есть приложение, в котором мне нужно сгенерировать дату и время на основе языкового стандарта, используя 

Код: Выделить всё

strftime
 функция, предоставляемая языком C 

Код: Выделить всё

time.h:
rtnValue = strftime(storeIn, len - 1, "%x %X", &timevar);
Возвращаемое значение 

Код: Выделить всё

strftime
 будет храниться в 

Код: Выделить всё

rtnValue. Если все пойдет хорошо, storeIn
 будет содержать отформатированную дату и время.
Для разных языков требуются разные размеры буфера. Однако бывают случаи, когда дата и время для данной локали могут превышать размер, указанный параметром 

Код: Выделить всё

len. Эту проблему можно смягчить, предоставив буфер большего размера, но также необходима правильная обработка ошибок.
strftime
 не устанавливает какой-либо конкретный код ошибки, например 

Код: Выделить всё

ERANGE или EOVERFLOW. Вместо этого он возвращает 0
 когда предоставленный буфер слишком мал, что означает, что байты не были записаны. Из-за требований мне нужно установить код ошибки из 

Код: Выделить всё

errno.h. Я путаюсь между ERANGE и EOVERFLOW
.

Код: Выделить всё

EOVERFLOW
 звучит уместно, и я видел некоторые реализации, использующие его при переполнении буфера. Однако в его описании четко указано: «Значение слишком велико для определенного типа данных», что предполагает, что часть «слишком большая» относится к превышению предела типа данных, а не к установленному вручную размеру буфера. Верно ли мое понимание? Если да, то к моему случаю это не относится.
 упоминает "Математический результат непредставим", хотя он в основном используется для математических функций, на некоторых веб-сайтах это указывается как входные данные, находящиеся за пределами диапазона, который звучит правильно.
Вопрос:

Какой код ошибки будет наиболее подходящим для такой ситуации?
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -eoverflow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»