sprintf segfault, пока printf в порядке [закрыто]

Mozilla сообщает нам :

function parseInt преобразует свой первый аргумент в строку, анализирует его и возвращает целое число или NaN. Если не NaN, возвращаемое значение будет десятичным целочисленным представлением первого аргумента, принятого как число в указанном базисе (base). Например, радиус 10 указывает на преобразование из десятичного числа, 8 восьмеричных, 16 шестнадцатеричных и т. Д. Для радиусов выше 10 буквы алфавита указывают цифры больше 9. Например, для шестнадцатеричных чисел (основание 16) используются A-F.

blockquote>

В спецификация , 15.1.2.2/1 сообщает нам, что преобразование в строку выполняется с использованием встроенного ToString, который (согласно 9.8) дает "null" (не путать с toString, что "u"!).

Итак, давайте рассмотрим parseInt("null", 24).

Конечно, это не целочисленная строка base-24 целиком, но «n» - : decimal 23 .

Теперь разбор остановок после вычитания десятичной цифры 23, потому что "u" не найден в системе base-24:

Если S содержит любой символ, который не является знаком radix-R, то пусть Z - подстрока S, состоящая из всех символов до первого такого символа; в противном случае пусть Z является S. [15.1.2.2/11]

blockquote>

(И поэтому parseInt(null, 23) (и более низкие радиусы) дает вам NaN, а не 23: "n" не находится в системе base-23.)

0
задан calccrypto 18 September 2012 в 21:05
поделиться