Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Лидирующий “0” в std::atoi

Вот такой код выводит "10" в консоль (VS2017):
#include
int main() { int a = std::atoi("010"); std::cout << a << std::endl; }
Т.е. ведущий ноль игнорируется, но на сколько это стандартизировано? Здесь и здесь не нашел.


Ответ

Согласно стандарту С11 функция int atoi(const char *nptr); эквивалентна (int)strtol(nptr, (char **)NULL, 10) за исключением поведения при ошибке.
В описании последней помимо прочего сказано:
... only letters and digits whose ascribed values are less than that of base are permitted.
0 является валидной десятичной цифрой, таким образом наличие предшествующих нулей не должно влиять на результат вызова.
Наличие нуля в начале могло бы влиять при автоматическом определении основания системы счисления, т.е. при указании base = 0, но для atoi это не актуально.

Комментариев нет:

Отправить комментарий