strtoimax, strtoumax
Определено в заголовке <inttypes.h> | ||
|---|---|---|
intmax_t strtoimax( const char *restrict nptr,
char **restrict endptr, int base );
| (с C99) | |
uintmax_t strtoumax( const char *restrict nptr,
char **restrict endptr, int base );
| (с 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;
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));
return 0;
}Вывод:
-123 255 44027 8 10 16 9223372036854775807 Numerical result out of range
Ссылки
- Стандарт C23 (ISO/IEC 9899:2023):
- 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/w/c/string/byte/strtoimax