Функции библиотеки C -strtol()

Стандартная библиотека C - <stdlib.h>

Описание

Функции библиотеки Clong int strtol(const char *str, char **endptr, int base)Передайте параметрstrСтрока, на которую указывает, в соответствии с заданнымbaseПреобразует в длинное целое число (типа long int). Основание должно быть от 2 до 36 (включительно) или специальное значение 0.

Объявление

Ниже приведено объявление функции strtol().

long int strtol(const char *str, char **endptr, int base)

Параметр

  • str-- Строка, преобразуемая в длинное целое число.
  • endptr-- Ссылка на объект типа char*, значение которого функция устанавливает вstrследующий символ после числового значения.
  • base-- Основание, которое должно быть от 2 до 36 (включительно) или специальное значение 0. Если base равно 0, основание определяется префиксом строки: если строка начинается с '0x' или '0X', она трактуется как шестнадцатеричная; если строка начинается с '0', она трактуется как восьмеричная; в противном случае — как десятичная.

Возвращаемое значение

Функция возвращает преобразованное значение длинного целого числа. Если входная строка не соответствует числовому формату, strtol() вернёт 0. Если результат преобразования превышает представимый диапазон длинного целого числа, произойдёт переполнение, и errno будет установлен в ERANGE. Вы можете использовать переменную errno из заголовочного файла <errno.h>, чтобы проверить, произошло ли переполнение.

Пример

В следующем примере демонстрируется использование функции strtol().

В следующем примере мы преобразуем строку "12345" в длинное целое число. Функция strtol() преобразует эту строку в соответствующее целочисленное значение 12345. Поскольку мы указали base равным 10, преобразование будет выполнено в десятичной системе.

Пример

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12345";
    char *endptr;
    long int num;

    num = strtol(str, &endptr, 10);

    if (*endptr != '\0') {
        printf("Ошибка преобразования: входная строка не является допустимым целым числом.\n");
    } else {
        printf("Результат преобразования: %ld\n", num);
    }

    return 0;
}

Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:

转换结果:12345

Если входная строка не может быть полностью преобразована в целое число, функция strtol() возвращает успешно преобразованную часть, а endptr указывает на первый символ непреобразованной части. В этом примере endptr указывает на нулевой символ '\0' в конце строки, что означает, что вся входная строка была успешно преобразована в целое число.

Если входная строка содержит нецифровые символы, например "12ab", то endptr будет указывать на начальную позицию "ab", что указывает на то, что преобразование не удалось.

Пример

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12ab";
    char *endptr;
    long int num;

    num = strtol(str, &endptr, 10);

    if (*endptr != '\0') {
        printf("Ошибка преобразования: входная строка не является допустимым целым числом. Непреобразованная часть: %s\n", endptr);
    } else {
        printf("Результат преобразования: %ld\n", num);
    }

    return 0;
}

В приведённом выше примере мы преобразуем строку "12ab" в длинное целое число. Функция strtol() попытается преобразовать эту строку в соответствующее целочисленное значение 12, но поскольку строка содержит нецифровые символы "ab", преобразование не может быть завершено.

Вывод будет:

转换失败:输入字符串不是一个有效的整数。未转换部分:ab

Стандартная библиотека C - <stdlib.h>

Другие расширения