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

Имеет ли sscanf ( "123456789123456789123456789", "% d", & n) определенное поведение?

Если sscanf() или другой функции из семейства scanf задана последовательность цифр, преобразованное значение которых превышает максимальное значение целевого целочисленного типа,

  • следует ли считать преобразование неудачным?
  • - это поведение, определенное вообще?
4b9b3361

Ответ 1

Из стандарта 7.21.6.2p10 ((f)scanf применяется ко всему семейству):

... Если этот объект не имеет соответствующего типа или , если результат преобразования не может быть представлен в объекте, поведение undefined.

Похож на другую причину, чтобы быть очень осторожным с семейством scanf. Функции strtoXX имеют полностью определенное поведение. Они возвращают LONG_MAX и т.д. Для слишком большого ввода и устанавливают errno == ERANGE. Поэтому, если вам нужна точная информация, введите токен вручную и используйте эти функции для преобразования. Другое преимущество: улучшенная обработка ошибок.