Namespaces
Variants

strtoul, strtoull

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <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)
преобразует широкую строку в целое число без знака
(функция)
преобразует байтовую строку в целое число
(функция)
преобразует байтовую строку в целое число
(функция)