Namensräume
Varianten
Aktionen

strtoul, strtoull

Von cppreference.com
< c‎ | string‎ | byte
Definiert im Header <stdlib.h>
unsigned long      strtoul( const char*          str, char**          str_end,
                            int base );
(bis C99)
unsigned long      strtoul( const char* restrict str, char** restrict str_end,
                            int base );
(seit C99)
unsigned long long strtoull( const char* restrict str, char** restrict str_end,
                             int base );
(seit C99)

Interpretiert einen vorzeichenlosen Integer-Wert aus einer Byte-Zeichenkette, auf die str zeigt.

Verwirft alle Leerzeichen (wie durch Aufruf von isspace identifiziert), bis das erste Nicht-Leerzeichen gefunden wird. Dann werden so viele Zeichen wie möglich genommen, um eine gültige Basis-n (wobei n=base) unsigned integer-Zahlendarstellung zu bilden, und sie werden in einen Integer-Wert konvertiert. Die gültige unsigned integer-Darstellung besteht aus den folgenden Teilen

  • (optional) Vorzeichen (+ oder -)
  • (optional) Präfix (0), das die Oktalbasis angibt (gilt nur, wenn die Basis 8 oder 0 ist)
  • (optional) Präfix (0x oder 0X), das die Hexadezimalbasis angibt (gilt nur, wenn die Basis 16 oder 0 ist)
  • eine Folge von Ziffern

Die Menge der gültigen Werte für base ist {0, 2, 3, ..., 36}. Die Menge der gültigen Ziffern für Basis-2-Ganzzahlen ist {0, 1}, für Basis-3-Ganzzahlen ist {0, 1, 2} und so weiter. Für Basen größer als 10 umfassen gültige Ziffern alphabetische Zeichen, beginnend mit Aa für Basis-11-Ganzzahlen bis Zz für Basis-36-Ganzzahlen. Die Groß-/Kleinschreibung der Zeichen wird ignoriert.

Zusätzliche numerische Formate können durch die aktuell installierte C-Locale akzeptiert werden.

Wenn der Wert von base 0 ist, wird die numerische Basis automatisch erkannt: Wenn das Präfix 0 ist, ist die Basis Oktal, wenn das Präfix 0x oder 0X ist, ist die Basis Hexadezimal, ansonsten ist die Basis Dezimal.

Wenn das Minuszeichen Teil der Eingabesequenz war, wird der numerische Wert, der aus der Ziffernsequenz berechnet wurde, wie durch unäres Minus im Ergebnistyp negiert, was Regeln für Überlauf von vorzeichenlosen Ganzzahlen anwendet.

Die Funktionen setzen den Zeiger, auf den str_end zeigt, auf das Zeichen nach dem zuletzt interpretierten Zeichen. Wenn str_end ein Nullzeiger ist, wird er ignoriert.

Inhalt

[bearbeiten] Parameter

str - Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll
str_end - Zeiger auf einen Zeiger auf ein Zeichen, kann auf eine Position nach dem zuletzt interpretierten Zeichen gesetzt werden
base - Basis des interpretierten Ganzzahlwerts

[bearbeiten] Rückgabewert

Integer-Wert, der dem Inhalt von str bei Erfolg entspricht. Wenn der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf (errno wird auf ERANGE gesetzt) und ULONG_MAX oder ULLONG_MAX wird zurückgegeben. Wenn keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

[bearbeiten] Beispiel

#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);
}

Ausgabe

Parsing '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
After the loop p points to ' - 42'

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.24.1.7 The strtol, strtoll, strtoul, and strtoull functions (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.22.1.4 The strtol, strtoll, strtoul, and strtoull functions (p: 251-252)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.22.1.4 The strtol, strtoll, strtoul, and strtoull functions (p: 344-345)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.20.1.4 The strtol, strtoll, strtoul, and strtoull functions (p: 310-311)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.10.1.6 The strtoul function

[bearbeiten] Siehe auch

wandelt eine breite Zeichenkette in einen vorzeichenlosen ganzzahligen Wert um
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen Ganzzahlwert
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen Ganzzahlwert
(Funktion) [bearbeiten]
C++ Dokumentation für strtoul