strtol(3C) strtol(3C)
NAME
strtol, strtoul, atol, atoi, strtoll, strtoull, atoll - Zeichenkette
in ganze Zahl umwandeln
SYNTAX
#include <stdlib.h>
long int strtol(const char *str, char **endptr, int base);
unsigned long int strtoul(const char *str, char **endptr, int base);
long int atol(const char *str);
int atoi(const char *str);
long long strtoll(const char *str, char **ptr, int base);
unsigned long long strtoull(const char *str, char **ptr, int base);
long long atoll(const char *str);
BESCHREIBUNG
strtol() liefert den Wert der Zeichenkette str als long int zurück.
Die Zeichenkette wird bis zum ersten Zeichen verarbeitet, welches
inkonsistent mit der Basis ist. Vorangestellte Leerzeichen (wie durch
isspace() in ctype(3C) definiert) werden ignoriert.
Wenn der Wert von endptr nicht (char **)NULL ist, wird in endptr ein
Zeiger auf das Zeichen gesetzt, welches die Verarbeitung abgebrochen
hat. Kann keine ganze Zahl gebildet werden, wird endptr auf str
gesetzt und Null zurückgegeben.
Ist base positiv (und nicht größer als 36), wird dieser Wert als Basis
für die Umwandlung verwendet. Nach einem optionalen Vorzeichen werden
führende Nullen ignoriert; ist base gleich 16, so werden die Zeichen
"0x" oder "0X" ebenfalls ignoriert.
Wenn base gleich Null ist, bestimmt die Zeichenkette selbst die Basis;
dies geschieht folgendermaßen: Nach einem optionalen Vorzeichen zeigt
eine Null an, daß eine oktale Umwandlung durchgeführt werden soll;
wird die Zeichenkette "0x" oder "0X" erkannt, wird eine hexadezimale
Umwandlung durchgeführt; ansonsten wird eine dezimale Umwandlung aus-
geführt.
Die Umwandlung von long nach int kann durch Zuweisung oder durch eine
explizite Typkonvertierung stattfinden.
Würde der durch str dargestellte Wert einen Überlauf verursachen, wird
LONGMAX oder LONGMIN zurückgeliefert (abhängig vom Vorzeichen), und
errno wird auf ERANGE gesetzt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
strtol(3C) strtol(3C)
strtoul() ähnelt strtol() mit der Ausnahme, daß strtoul() eine vorzei-
chenlose Zahl vom Typ long int für str zurückgibt. Würde der Wert aus
str einen Überlauf verursachen, wird ULONGMAX zurückgeliefert und
errno auf den Wert ERANGE gesetzt.
strtoll() ähnelt strtol() mit der Ausnahme, daß strtoll() eine Zahl
vom Typ long long int für str zurückgibt. Würde der Wert aus str einen
Überlauf verursachen, wird ULONGMAX oder LONGLONGMIN (abhängig vom
Vorzeichen des Werts) zurückgeliefert und errno auf den Wert ERANGE
gesetzt.
strtoull() ähnelt strtoll() mit der Ausnahme, daß strtoull() eine vor-
zeichenlose Zahl vom Typ long long int für str zurückgibt. Würde der
Wert aus str einen Überlauf verursachen, wird ULONGMAX zurückgelie-
fert und errno auf den Wert ERANGE gesetzt.
Abgesehen vom Verhalten beim Auftreten von Fehlern ist atol(str) äqui-
valent mit:
strtol(str, (char **)NULL, 10).
Abgesehen vom Verhalten beim Auftreten von Fehlern ist atoi(str) äqui-
valent mit:
(int) strtol(str, (char **)NULL, 10).
Abgesehen vom Verhalten beim Auftreten von Fehlern ist atoll(str)
äquivalent mit:
strtoll(str, (char **)NULL, 10).
ERGEBNIS
Wenn strtol() mit dem Argument base größer als 36 aufgerufen wird,
wird 0 zurückgegeben und errno auf EINVAL gesetzt.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion strtol() schlägt bei folgender Bedingung fehl:
ERANGE Der Rückgabewert ist nicht darstellbar.
Die Funktion strtol() kann bei folgender Bedingung fehlschlagen:
EINVAL Der Wert von base wird nicht unterstützt.
Die Funktion strtoul() schlägt bei folgenden Bedingungen fehl:
EINVAL Der Wert von base wird nicht unterstützt.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
strtol(3C) strtol(3C)
ERANGE Der Rückgabewert ist nicht darstellbar.
Die Funktion strtoul() kann bei folgender Bedingung fehlschlagen:
EINVAL Es konnte keine Konversion vorgenommen werden.
HINWEISE
Da der Rückgabewert im Fehlerfall nicht festgelegt ist, können Fehler
nur wie folgt festgestellt werden: errno wird auf 0 gesetzt, dann wird
die Funktion aufgerufen und errno geprüft. Wenn errno ungleich 0 ist,
muß ein Fehler aufgetreten sein.
strtol() akzeptiert als gültige Eingaben keine Werte mehr, die größer
als LONGMAX sind. In diesem Fall ist strtoul() zu verwenden.
Da bei nicht darstellbarem Rückgabewert bei atol() und atoi() das
Ergebnis undefiniert ist, sollten Sie statt dieser Funktionen strtol()
verwenden.
SIEHE AUCH
ctype(3C), strtod(3C), scanf(3S), stdlib(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98