strtoimax, strtoumax
| 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 (
0xoder0X), 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
strentspricht. - Wenn der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf (
errnowird aufERANGEgesetzt) undINTMAX_MAX,INTMAX_MIN,UINTMAX_MAXoder0wird 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
| (C99)(C99) |
konvertiert eine Wide-String zu intmax_t oder uintmax_t (Funktion) |
| (C99) |
konvertiert einen Byte-String in einen Ganzzahlwert (Funktion) |
| (C99) |
konvertiert einen Byte-String in einen vorzeichenlosen Ganzzahlwert (Funktion) |
| C++ Dokumentation für strtoimax, strtoumax
| |