У меня есть приложение, в котором мне нужно сгенерировать дату и время на основе языкового стандарта, используя
функция, предоставляемая языком C
Код: Выделить всё
time.h:
rtnValue = strftime(storeIn, len - 1, "%x %X", &timevar);
Возвращаемое значение
будет храниться в
будет содержать отформатированную дату и время.
Для разных языков требуются разные размеры буфера. Однако бывают случаи, когда дата и время для данной локали могут превышать размер, указанный параметром
Код: Выделить всё
len. Эту проблему можно смягчить, предоставив буфер большего размера, но также необходима правильная обработка ошибок.
strftime
не устанавливает какой-либо конкретный код ошибки, например
Код: Выделить всё
ERANGE или EOVERFLOW. Вместо этого он возвращает 0
когда предоставленный буфер слишком мал, что означает, что байты не были записаны. Из-за требований мне нужно установить код ошибки из
Код: Выделить всё
errno.h. Я путаюсь между ERANGE и EOVERFLOW
.
звучит уместно, и я видел некоторые реализации, использующие его при переполнении буфера. Однако в его описании четко указано: «Значение слишком велико для определенного типа данных», что предполагает, что часть «слишком большая» относится к превышению предела типа данных, а не к установленному вручную размеру буфера. Верно ли мое понимание? Если да, то к моему случаю это не относится.
упоминает "Математический результат непредставим", хотя он в основном используется для математических функций, на некоторых веб-сайтах это указывается как входные данные, находящиеся за пределами диапазона, который звучит правильно.
Вопрос:
Какой код ошибки будет наиболее подходящим для такой ситуации?
Заранее спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... -eoverflow