Вот такой код выводит "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 это не актуально.
Комментариев нет:
Отправить комментарий