Spec-Zone.ru › C

strtoimax, strtoumax

Определено в заголовочном файле <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) до первого непробельного символа, затем считывает максимально возможное количество символов, образующих корректное представление целого числа в системе счисления с основанием 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 локаль может допускать дополнительные числовые форматы.

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

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

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

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

Параметры

nptr - указатель на завершаемую нулевым символом байтовую строку для интерпретации
endptr - указатель на указатель на символ
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)); // base 10
    printf("%ld\n", strtoimax("11111111", &endptr, 2));   // base 2
    printf("%ld\n", strtoimax("XyZ", &endptr, 36));       // base 36
    printf("%ld\n", strtoimax("010", &endptr, 0));        // octal auto-detection
    printf("%ld\n", strtoimax("10", &endptr, 0));         // decimal auto-detection
    printf("%ld\n", strtoimax("0x10", &endptr, 0));       // hexadecimal auto-detection

    // range error: 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)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/byte/strtoimax

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API