strtoul, strtoull
|
Определено в заголовочном файле
<stdlib.h>
|
||
|
unsigned
long
strtoul
(
const
char
*
str,
char
**
str_end,
int base ) ; |
(до C99) | |
|
unsigned
long
strtoul
(
const
char
*
restrict
str,
char
**
restrict
str_end,
int base ) ; |
(начиная с C99) | |
|
unsigned
long
long
strtoull
(
const
char
*
restrict
str,
char
**
restrict
str_end,
int base ) ; |
(начиная с C99) | |
Интерпретирует целое число без знака в байтовой строке, на которую указывает str .
Отбрасывает любые пробельные символы (определяемые вызовом
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 локалью .
Если значение
base
равно
0
, система счисления определяется автоматически: если префикс
0
- система восьмеричная, если префикс
0x
или
0X
- система шестнадцатеричная, в противном случае система десятичная.
Если знак минуса был частью входной последовательности, числовое значение, вычисленное из последовательности цифр, инвертируется как если бы с помощью унарного минуса в результирующем типе, который применяет правила переполнения беззнаковых целых чисел.
Функция устанавливает указатель, на который указывает str_end , чтобы он указывал на символ после последнего интерпретированного символа. Если str_end является нулевым указателем, он игнорируется.
Содержание |
Параметры
| str | - | указатель на нуль-терминированную байтовую строку для интерпретации |
| str_end | - | указатель на указатель на символ, может быть установлен в позицию после последнего интерпретированного символа |
| base | - | base интерпретируемого целочисленного значения |
Возвращаемое значение
Целочисленное значение, соответствующее содержимому
str
при успешном выполнении. Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (
errno
устанавливается в
ERANGE
) и возвращается
ULONG_MAX
или
ULLONG_MAX
. Если преобразование не может быть выполнено,
0
возвращается.
Пример
#include <errno.h> #include <stdio.h> #include <stdlib.h> int main(void) { const char* p = "10 200000000000000000000000000000 30 -40 - 42"; printf("Parsing '%s':\n", p); char* end = NULL; for (unsigned long i = strtoul(p, &end, 10); p != end; i = strtoul(p, &end, 10)) { printf("'%.*s' -> ", (int)(end - p), p); p = end; if (errno == ERANGE) { errno = 0; printf("range error, got "); } printf("%lu\n", i); } printf("After the loop p points to '%s'\n", p); }
Вывод:
Parsing '10 200000000000000000000000000000 30 -40 - 42': '10' -> 10 ' 200000000000000000000000000000' -> range error, got 18446744073709551615 ' 30' -> 30 ' -40' -> 18446744073709551576 After the loop p points to ' - 42'
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.24.1.7 Функции strtol, strtoll, strtoul и strtoull (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.22.1.4 Функции strtol, strtoll, strtoul и strtoull (стр. 251-252)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.22.1.4 Функции strtol, strtoll, strtoul и strtoull (стр: 344-345)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.20.1.4 Функции strtol, strtoll, strtoul и strtoull (стр. 310-311)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.1.6 Функция strtoul
Смотрите также
|
(C95)
(C99)
|
преобразует широкую строку в целое число без знака
(функция) |
|
(C99)
|
преобразует байтовую строку в целое число
(функция) |
|
(C99)
|
преобразует байтовую строку в целое число
(функция) |
|
Документация C++
для
strtoul
|
|