strtoul, strtoull
|
Definiert in 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 Ganzzahlwert in der Byte-Zeichenkette, auf die str 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
) Ganzzahl ohne Vorzeichen Darstellung zu bilden und konvertiert sie in einen ganzzahligen Wert. Der gültige Ganzzahlwert ohne Vorzeichen 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 (
0xoder0X) 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 aus der Ziffernfolge berechnete numerische Wert negiert, als ob durch unary minus im Ergebnistyp, was die Wrap-around-Regeln für vorzeichenlose Ganzzahlen anwendet.
Die Funktion setzt den Zeiger, auf den str_end zeigt, so, dass er auf das Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn str_end ein Nullzeiger ist, wird er ignoriert.
Inhaltsverzeichnis |
Parameter
| str | - | Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll |
| str_end | - | Zeiger auf einen Zeiger zu einem Zeichen; kann auf eine Position nach dem letzten interpretierten Zeichen gesetzt werden |
| base | - | base des interpretierten Ganzzahlwerts |
Rückgabewert
Integerwert entsprechend dem Inhalt von
str
bei Erfolg. Falls 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. Falls keine Konvertierung durchgeführt werden kann, wird
0
zurückgegeben.
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'
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.24.1.7 Die Funktionen strtol, strtoll, strtoul und strtoull (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.22.1.4 Die Funktionen strtol, strtoll, strtoul und strtoull (S: 251-252)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.22.1.4 Die Funktionen strtol, strtoll, strtoul und strtoull (S: 344-345)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.20.1.4 Die Funktionen strtol, strtoll, strtoul und strtoull (S: 310-311)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.10.1.6 Die strtoul-Funktion
Siehe auch
|
(C95)
(C99)
|
wandelt eine Breitzeichen-Zeichenkette in einen vorzeichenlosen Ganzzahlwert um
(Funktion) |
|
(C99)
|
wandelt eine Byte-Zeichenkette in einen Ganzzahlwert um
(Funktion) |
|
(C99)
|
wandelt eine Byte-Zeichenkette in einen Ganzzahlwert um
(Funktion) |
|
C++-Dokumentation
für
strtoul
|
|