Namensräume
Varianten
Aktionen

strtoimax, strtoumax

Von cppreference.com
< 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 Ganzzahlwert in einer Byte-Zeichenkette, auf die nptr zeigt.

Verwirft alle Leerzeichen (wie durch Aufruf von isspace identifiziert), bis das erste Nicht-Leerzeichen gefunden wird, und nimmt dann so viele Zeichen wie möglich auf, um eine gültige *Basis-n* (wobei n = base) Ganzzahl-Darstellung zu bilden und sie in einen Ganzzahlwert umzuwandeln. Der gültige Ganzzahlwert besteht aus 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 aus der Ziffernsequenz berechnete numerische Wert negiert, als ob durch unäres Minus im Ergebnistyp.

Die Funktionen setzen den von endptr adressierten Zeiger so, dass er auf das Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn endptr ein Nullzeiger ist, wird er ignoriert.

Wenn nptr leer ist oder nicht die erwartete Form hat, wird keine Konvertierung durchgeführt, und (wenn endptr kein Nullzeiger ist) wird der Wert von nptr im von endptr adressierten Objekt gespeichert.

Inhalt

[bearbeiten] Parameter

nptr - Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll
endptr - Zeiger auf einen Zeiger auf ein Zeichen
base - Basis des interpretierten Ganzzahlwerts

[bearbeiten] Rückgabewert

  • Bei Erfolg wird ein Ganzzahlwert zurückgegeben, der dem Inhalt von str entspricht.
  • Wenn der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf (errno wird auf ERANGE gesetzt) und INTMAX_MAX, INTMAX_MIN, UINTMAX_MAX oder 0 wird zurückgegeben, je nach Situation.
  • Wenn keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

[bearbeiten] 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)); // base 10
    printf("%ld\n", strtoimax("11111111", &endptr, 2));   // base 2
    printf("%ld\n", strtoimax("XyZ", &endptr, 36));       // base 36
    printf("%ld\n", strtoimax("010", &endptr, 0));        // octal auto-detection
    printf("%ld\n", strtoimax("10", &endptr, 0));         // decimal auto-detection
    printf("%ld\n", strtoimax("0x10", &endptr, 0));       // hexadecimal auto-detection
 
    // range error: 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

konvertiert eine Wide-String zu intmax_t oder uintmax_t
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen Ganzzahlwert
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen vorzeichenlosen Ganzzahlwert
(Funktion) [bearbeiten]
C++ Dokumentation für strtoimax, strtoumax