Второй аргумент
Как выглядит второй аргумент strtol
Работа?
Вот что я попробовал:
strtol(str, &ptr, 10)
где ptr
это char *
а также str
это строка Теперь, если я пройду в str
как '34EF'
и распечатать *ptr
, это правильно дает мне E
, а также *(ptr+1)
дает мне F
Однако, если я печатаю ptr
, это дает мне EF!
Не должен печатать ptr
просто привести к мусорной стоимости, как шестнадцатеричный адрес или что-то?
1 ответ
ptr
указатель на внутреннюю часть строки с нулевым символом в конце Так дано "34EF"
в конечном итоге он указывает на персонажа 'E'
и строка, начинающаяся с этого адреса "EF"
,
Четырехсимвольная строка типа C p = "34EF"
на самом деле содержит пять строк в одной. Строка p
является "34EF"
, Строка p+1
является "4EF"
; строка p+2
является "EF"
; p+3
является "F"
а также p+4
пустая строка ""
, В этом случае p+4
указывает на нулевой байт терминатора после F
,
Говоря о пустой строке, если вход strtol
состоит только из допустимых символов, составляющих числовой токен, затем ptr
должен указывать на пустую строку.
Если вы хотите запретить конечный мусор, вы можете проверить это. То есть, даже если правильное число анализируется, если *ptr
не равно 0, то на входе есть завершающий мусор. В некоторых случаях полезно отклонить следующее: "Уважаемый пользователь, 10Zdf - это не число; пожалуйста, введите число!"