Обработка ошибок размера буфера в 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

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