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) до первого непробельного символа, затем считывает максимально возможное количество символов, образующих корректное представление беззнакового целого числа в системе счисления с основанием 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 | - | основание системы счисления интерпретируемого целочисленного значения |
Возвращаемое значение
Целочисленное значение, соответствующее содержимому 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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/byte/strtoul