Namespaces
Variants

strtoimax, strtoumax

From cppreference.net
< c ‎ | string ‎ | byte
Definiert in Header <inttypes.h>
intmax_t strtoimax ( const char * restrict nptr,
char ** restrict endptr, int base ) ;
(1) (seit C99)
uintmax_t strtoumax ( const char * restrict nptr,
char ** restrict endptr, int base ) ;
(2) (seit C99)

Interpretiert einen ganzzahligen Wert in der Byte-Zeichenkette, auf die nptr zeigt.

Verwirft alle Leerzeichen (identifiziert durch Aufruf von isspace ) bis zum ersten Nicht-Leerzeichen gefunden wird, dann nimmt so viele Zeichen wie möglich, um eine gültige Basis-n (wobei n= base ) Ganzzahldarstellung zu bilden und konvertiert sie in einen Ganzzahlwert. Der gültige Ganzzahlwert besteht aus folgenden Teilen:

  • (optional) Plus- oder Minuszeichen
  • (optional) Präfix ( 0 ) zur Kennzeichnung der Oktalbasis (gilt nur, wenn die Basis 8 oder 0 ist)
  • (optional) Präfix ( 0x oder 0X ) zur Kennzeichnung der Hexadezimalbasis (gilt nur, wenn die Basis 16 oder 0 ist)
  • eine Ziffernfolge

Die Menge der gültigen Werte für die Basis ist {0, 2, 3, ..., 36} . Die Menge der gültigen Ziffern für Basis- 2 -Integer ist {0, 1} , für Basis- 3 -Integer 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 -Integer, bis zu Zz für Basis- 36 -Integer. Die Groß-/Kleinschreibung der Zeichen wird ignoriert.

Zusätzliche numerische Formate können von der aktuell installierten C- Locale akzeptiert werden.

Wenn der Wert von base 0 beträgt, wird die numerische Basis automatisch erkannt: wenn das Präfix 0 lautet, ist die Basis oktal, wenn das Präfix 0x oder 0X lautet, ist die Basis hexadezimal, andernfalls ist die Basis dezimal.

Wenn das Minuszeichen Teil der Eingabesequenz war, wird der numerische Wert, der aus der Ziffernfolge berechnet wurde, negiert, als ob durch unary minus im Ergebnistyp.

Die Funktion setzt den Zeiger, auf den endptr zeigt, so, dass er auf das Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn endptr ein Nullzeiger ist, wird er ignoriert.

Wenn der nptr leer ist oder nicht die erwartete Form hat, wird keine Konvertierung durchgeführt, und (falls endptr kein Nullzeiger ist) wird der Wert von nptr in dem Objekt gespeichert, auf das endptr zeigt.

Inhaltsverzeichnis

Parameter

nptr - Zeiger auf die zu interpretierende nullterminierte Byte-Zeichenkette
endptr - Zeiger auf einen Zeiger zu einem Zeichen
base - base des interpretierten Ganzzahlwerts

Rückgabewert

  • Bei Erfolg wird ein ganzzahliger Wert zurückgegeben, der dem Inhalt von str entspricht.
  • Falls der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf (Setzen von errno auf ERANGE ) und es wird INTMAX_MAX , INTMAX_MIN , UINTMAX_MAX oder 0 zurückgegeben, je nachdem was zutreffend ist.
  • Falls keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

Beispiel

#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
    char* endptr = NULL;
    printf("%ld\n", strtoimax(" -123junk", &endptr, 10)); // Basis 10
    printf("%ld\n", strtoimax("11111111", &endptr, 2));   // Basis 2
    printf("%ld\n", strtoimax("XyZ", &endptr, 36));       // Basis 36
    printf("%ld\n", strtoimax("010", &endptr, 0));        // Oktale Auto-Erkennung
    printf("%ld\n", strtoimax("10", &endptr, 0));         // Dezimale Auto-Erkennung
    printf("%ld\n", strtoimax("0x10", &endptr, 0));       // Hexadezimale Auto-Erkennung
    // Bereichsfehler: LONG_MAX+1 --> LONG_MAX
    errno = 0;
    printf("%ld\n", strtoimax("9223372036854775808", &endptr, 10));
    printf("%s\n", strerror(errno));
}

Ausgabe:

-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.8.2.3 Die strtoimax- und strtoumax-Funktionen (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.8.2.3 Die strtoimax- und strtoumax-Funktionen (S: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.8.2.3 Die strtoimax- und strtoumax-Funktionen (S: 219)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.8.2.3 Die strtoimax- und strtoumax-Funktionen (S: 200)

Siehe auch

wandelt eine Breitzeichen-Zeichenkette in intmax_t oder uintmax_t um
(Funktion)
wandelt eine Byte-Zeichenkette in einen ganzzahligen Wert um
(Funktion)
wandelt eine Byte-Zeichenkette in einen vorzeichenlosen ganzzahligen Wert um
(Funktion)
C++-Dokumentation für strtoimax , strtoumax