Namespaces
Variants

strtoimax, strtoumax

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <inttypes.h>
intmax_t strtoimax ( const char * restrict nptr,
char ** restrict endptr, int base ) ;
(1) (начиная с C99)
uintmax_t strtoumax ( const char * restrict nptr,
char ** restrict endptr, int base ) ;
(2) (начиная с C99)

Интерпретирует целочисленное значение в байтовой строке, на которую указывает nptr .

Отбрасывает любые пробельные символы (определяемые вызовом isspace ) до первого непробельного символа, затем принимает максимально возможное количество символов для формирования валидного base-n (где n= base ) целочисленного представления и преобразует их в целочисленное значение. Валидное целочисленное значение состоит из следующих частей:

  • (необязательно) знак плюс или минус
  • (необязательно) префикс ( 0 ), указывающий восьмеричную систему счисления (применяется только когда основание равно 8 или 0 )
  • (необязательно) префикс ( 0x или 0X ), указывающий шестнадцатеричную систему счисления (применяется только когда основание равно 16 или 0 )
  • последовательность цифр

Множество допустимых значений для основания составляет {0, 2, 3, ..., 36} . Множество допустимых цифр для целых чисел с основанием 2 {0, 1} , для целых чисел с основанием 3 {0, 1, 2} и так далее. Для оснований больше 10 допустимые цифры включают буквенные символы, начиная с Aa для целого числа с основанием 11 , до Zz для целого числа с основанием 36 . Регистр символов игнорируется.

Дополнительные числовые форматы могут приниматься текущей установленной C locale .

Если значение base равно 0 , система счисления определяется автоматически: если префикс 0 , используется восьмеричная система, если префикс 0x или 0X , используется шестнадцатеричная система, в противном случае используется десятичная система.

Если знак минуса был частью входной последовательности, числовое значение, вычисленное из последовательности цифр, инвертируется как если бы с помощью унарного минуса в результирующем типе.

Функция устанавливает указатель, на который указывает endptr , чтобы он указывал на символ после последнего интерпретированного символа. Если endptr является нулевым указателем, он игнорируется.

Если nptr пуст или не имеет ожидаемой формы, преобразование не выполняется, и (если endptr не является нулевым указателем) значение nptr сохраняется в объекте, на который указывает endptr .

Содержание

Параметры

nptr - указатель на интерпретируемую нуль-терминированную байтовую строку
endptr - указатель на указатель на символ
base - base - основание интерпретируемого целочисленного значения

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

  • В случае успеха возвращается целочисленное значение, соответствующее содержимому str .
  • Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (устанавливается errno в значение ERANGE ) и возвращается INTMAX_MAX , INTMAX_MIN , UINTMAX_MAX или 0 в зависимости от ситуации.
  • Если преобразование не может быть выполнено, 0 .

Пример

#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
    char* endptr = NULL;
    printf("%ld\n", strtoimax(" -123junk", &endptr, 10)); // основание 10
    printf("%ld\n", strtoimax("11111111", &endptr, 2));   // основание 2
    printf("%ld\n", strtoimax("XyZ", &endptr, 36));       // основание 36
    printf("%ld\n", strtoimax("010", &endptr, 0));        // автоматическое определение восьмеричной
    printf("%ld\n", strtoimax("10", &endptr, 0));         // автоматическое определение десятичной
    printf("%ld\n", strtoimax("0x10", &endptr, 0));       // автоматическое определение шестнадцатеричной
    // ошибка диапазона: LONG_MAX+1 --> LONG_MAX
    errno = 0;
    printf("%ld\n", strtoimax("9223372036854775808", &endptr, 10));
    printf("%s\n", strerror(errno));
}

Вывод:

-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.8.2.3 Функции strtoimax и strtoumax (стр: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.8.2.3 Функции strtoimax и strtoumax (стр: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.8.2.3 Функции strtoimax и strtoumax (стр: 219)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.8.2.3 Функции strtoimax и strtoumax (стр: 200)

Смотрите также

преобразует широкую строку в intmax_t или uintmax_t
(функция)
преобразует байтовую строку в целочисленное значение
(функция)
преобразует байтовую строку в беззнаковое целочисленное значение
(функция)
Документация C++ для strtoimax , strtoumax