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)
См. также
|
(C99)(C99) | преобразует широкую строку в intmax_t или uintmax_t (функция) |
|
(C99) | преобразуют байтовую строку в целочисленное значение (функция) |
|
(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