Второй аргумент

Как выглядит второй аргумент 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 - это не число; пожалуйста, введите число!"

Другие вопросы по тегам