История изменений
Исправление RiseOfDeath, (текущая версия) :
Как можно было функции типа atoi, которые не различают отсутствие конвертируемой в число строки от легитимного значения, пропихнуть во все мыслимые стандарты Юникс и C?
А вот к стати не обязательно не валидная строка это ноль. Ноль это когда «не смог распарсить». Строка вида «123ОЛОЛОПЫЩЬПЫЩЬ» будет этой функцией интерпретирована как «123» (цитата с http://www.cplusplus.com «The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.»).
К вопросу про то, «как сие можно было пропихнуть в стандарт» - как гвоорится «наш стандарт - что хотим, то и пихаем». Опять же, что такое валидная строка? Возможно авторы решили что строка вида «0000» не валидная, и соответственно значение 0 однозначно считается не валидным. Опять же, а тчо она должна делать иначе? Как отличить ноль от не ноля, кидать ошибку? Или делать еще один параметр для возврата значения (или ошибки) по указателю? Так можно еще больше косяков сделать.
Исправление RiseOfDeath, :
Как можно было функции типа atoi, которые не различают отсутствие конвертируемой в число строки от легитимного значения, пропихнуть во все мыслимые стандарты Юникс и C?
А вот к стати не обязательно не валидная строка это ноль. Ноль это когда «не смог распарсить». Строка вида «123ОЛОЛОПЫЩЬПЫЩЬ» будет этой функцией интерпретирована как «123» (цитвата с http://www.cplusplus.com «The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.»).
К вопросу про то, «как сие можно было пропихнуть в стандарт» - как гвоорится «наш стандарт - что хотим, то и пихаем». Опять же, что такое валидная строка? Возможно авторы решили что строка вида «0000» не валидная, и соответственно значение 0 однозначно считается не валидным. Опять же, а тчо она должна делать иначе? Как отличить ноль от не ноля, кидать ошибку? Или делать еще один параметр для возврата значения (или ошибки) по указателю? Так можно еще больше косяков сделать.
Исправление RiseOfDeath, :
Как можно было функции типа atoi, которые не различают отсутствие конвертируемой в число строки от легитимного значения, пропихнуть во все мыслимые стандарты Юникс и C?
А вот к стати не обязательно не валидная строка это ноль. Ноль это когда «не смог распарсить». Строка вида «123ОЛОЛОПЫЩЬПЫЩЬ» будет этой функцией интерпретирована как «123» (цитвата с http://www.cplusplus.com «The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.»).
К вопросу про то, «как сие можно было пропихнуть в стандарт» - как гвоорится «наш стандарт - что хотим, то и пихаем». Опять же, что такое валидная строка? Возможно авторы решили что строка вида «0000» не валидная, и соответственно значение 0 однозначно считается не валидным.
Исходная версия RiseOfDeath, :
Как можно было функции типа atoi, которые не различают отсутствие конвертируемой в число строки от легитимного значения, пропихнуть во все мыслимые стандарты Юникс и C?
А вот к стати не обязательно. Строка вида «123ОЛОЛОПЫЩЬПЫЩЬ» будет этой функцией интерпретирована как валидная строка «123». не знаю насколько это по стандартру, но я лично на практике сталкивался с таким поведением (не помню точно это был GCC или msvs; проверять сейчас влом).