Seitenleiste

Wiki

Community

Funktionen

Speicher

Konventierung

Zufall

System

Enviroment

Suchen/Ersetzen

int Arithmetik

Multibyte-Chars

strtol()

strtol ist definiert in der stdlib, die in C über stdlib.h, bzw. in C++ über cstdlib eingebunden wird.

Funktion

strtol konvertiert einen ASCII-String in eine (vorzeichenbehaftete) breite Integerzahl (String to long integer - strtol).

Zunächst werden sämtliche Whitespaces (Leerzeichen, Tabs) übersprungen, bis die ersten Ziffern gefunden werden. Es darf ein + bzw. - der Zahl vorangestellt sein.

Werden Zeichen gefunden, die nicht interpretiert werden können, so wird die Konvertierung abgebrochen und die bisher interpretierte Zahl zurückgegeben, sowie die Adresse des Zeichens, das nicht mehr als Ziffer gelesen werden konnte. Somit lassen sich sehr einfach hintereinanderstehende Zahlen einlesen. Zusätzlich kann die Basis angegeben werden. Gültige Basen sind zwischen 2 und 36, wobei zunächst Ziffern (0..9) und anschließend Buchstaben (a..z, A..Z) als Ziffern verwendet werden.

Ist die Basis mit '0' angegeben, so können die Strings einen Hinweis auf die verwendete Basis machen (führende „0“ für oktale, führende „0x“ für hexadezimal Zahlen). Werden Ziffern ohne Präfix gefunden, so werden diese Zahlen zur Basis 10 angenommen.

Die String können mit einem + oder - Zeichen beginnen.

Gültige Strings wären z.B. „ 123“, „+1232“, „-42“.

Signatur

#include <stdlib.h>
long int strtol( char const * str, char ** endptr, int base );

str: der zu konvertierende String
endptr: Adresse einer Zeigervariablen, die auf das zuletzt gelesene Zeichen zeigt, also das Zeichen, das nicht mehr einer Zahl gehört
base: Basis, zwischen 2 und 36

Return value: die konvertierte Zahl als vorzeichenbehafteter, breiter Integerwert

Bemerkungen

Konnte keine Zahl konvertiert werden, weil der String leer oder aus nicht interpretierbaren Zeichen bestand (z.B. „abc“), so wird 0 zurückgegeben. Ist die zu konvertierende Zahl so groß, dass sie nicht dargestellt werden kann, so wird LONG_MAX bzw. LONG_MIN zurückgegeben und errno wird auf ERANGE gesetzt.

Die Umkehrfunktion, also einen long int-Wert in einen ASCII-String zu konvertierten, ist über sprintf() möglich.

Beispiel

#include <stdlib.h>
#include <stdio.h>
 
int main( void )
{
  char const * str = "-1234 Hallo";
  long int value;
  char * succ;
 
  value = strtol( str, &succ, 10 );
 
  printf( "Wert des Strings \"%s\": %d\nEs folgt: \'%s'\n", str, value, succ );
 
  return EXIT_SUCCESS;
}

Ausgabe:

Wert des Strings "-1234 Hallo": -1234
Es folgt: ' Hallo'

siehe auch