Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

strtol - Zeichenkette in ganze Zahl umwandeln (long int)

&pagelevel(4)&pagelevel

Definition

#include <stdlib.h>

long int strtol(const char *s, char **zg, int base);

strtol wandelt eine Zeichenkette, auf die s zeigt, in eine ganze Zahl vom Typ long int um. Die umzuwandelnde Zeichenkette kann wie folgt aufgebaut sein:

[{tab | 'BLANK' } ...][+ | -][0 | 0X]Ziffer...

Für tab sind alle Steuerzeichen für „Zwischenraum“ zulässig (siehe Definition bei isspace).

Für Ziffer sind je nach der Basis (siehe base) die Ziffern 0 bis 9 und die Buchstaben a (oder A) bis z (oder Z) zulässig.

strtol erkennt auch Zeichenketten, die mit umwandelbaren Ziffern (auch Oktal- bzw. Se- dezimal-Ziffern) beginnen, dann aber mit beliebigen Zeichen enden. In diesem Fall schneidet strtol zunächst den Ziffernteil ab und wandelt ihn um.

Zusätzlich erhält man von strtol über das zweite Argument zg vom Typ char ** einen Zeiger auf das erste nicht umwandelbare Zeichen in der Zeichenkette s; jedoch nur, wenn zg nicht als NULL-Zeiger übergeben wird.

Ein drittes Argument base bestimmt die Basis (z.B. Dezimal-, Oktal- oder Sedezimal-Basis) für die Umwandlung.

Parameter

const char *s

Zeiger auf die umzuwandelnde Zeichenkette.

char **zg

Wenn zg kein NULL-Zeiger ist, wird ein Zeiger (*zg) auf das erste Zeichen in s zurückgeliefert, das die Umwandlung beendet.
Wenn überhaupt keine Umwandlung möglich ist, wird *zg auf die Anfangsadresse der Zeichenkette s gesetzt.

int base

Ganze Zahl von 0 bis 36, die als Basis für die Berechnung verwendet werden soll.

Von Basis 11 bis 36 werden die Buchstaben a (oder A) bis z (oder Z) in der umzuwandelnden Zeichenkette als Ziffern angenommen, und zwar mit den entsprechenden Werten 10 (a/A) bis 35 (z/Z).

Falls base gleich 0 ist, wird die Basis folgendermaßen aus dem Aufbau der Zeichenkette s bestimmt:

führende 0

Basis 8

führendes 0X bzw. 0x

Basis 16

sonst

Basis 10

Falls mit Parameter base = 16 gerechnet wird, werden die Zeichen 0X bzw. 0x nach einem evtl. Vorzeichen in der Zeichenkette s ignoriert.

Returnwert

Ganzzahliger Wert vom Typ long int



für Zeichenketten, die eine wie oben beschriebene Struktur haben und einen Zahlenwert darstellen.

 

0     

für Zeichenketten, die nicht der oben beschriebenen Syntax entsprechen.
Es wird keine Konvertierung durchgeführt.
Wenn der Wert von base nicht unterstützt wird, wird errno auf EINVAL gesetzt.

 

LONG_MAX, LONG_MIN abgängig vom Vorzeichen des Wertes.

 


wenn der richtige Wert außerhalb des Bereichs der darstellbaren Werte liegt
errno wird auf ERANGE gesetzt, um den Fehler anzuzeigen.

Hinweis

Ist zg ein NULL-Zeiger und base gleich 10, wird strtol wie die Funktion atol ausgeführt:
atol(s) entspricht strtol(s, NULL, 10).

Beispiel

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  char *str1 = "  0x1ff";
  char *str2 = "h0***";
  char *end;
  long l;
  l = strtol(str1, &end, 0);          /* Die Basis 16 wird aus der */
                                      /* Zeichenkette str1 abgeleitet. */
  printf("Erster Wert: %ld\n", l);    /* 511 wird ausgegeben. */
  l = strtol(str2, &end, 20);         /* Basis = 20 */
  printf("Zweiter Wert: %ld\n", l);   /* 340 (17*20) wird ausgegeben. */
  printf("Rest von str2: %s\n", end); /* "***" wird ausgegeben. */
  return 0;
}

Siehe auch

atol, atoi, strtod, strtoll, strtoul, strtoull, wcstol, wcstoll, wcstoul, wcstoull