C Standard-Bibliothek

Hilfsfunktionen: <stdlib.h>


Die Definitionsdatei <stdlib.h> vereinbart Funktionen zur Umwandlung von Zahlen, für Speicherverwaltung und ähnliche Aufgaben.

  double atof(const char *s)
atof wandelt s in double um; die Funktion ist äquivalent zu
	strtod(s, (char**) NULL)


  int atoi(const char *s)

atoi wandelt s in int um; die Funktion ist äquivalent zu

	(int)strtol(s, (char**) NULL, 10)


  long atol(const char *s)

atol wandelt s in long um; die Funktion ist äquivalent zu

	strtol(s, (char**) NULL, 10)


  double strtod(const char *s, char **endp)

strtod wandelt den Anfang der Zeichenkette s in double um, dabei wird Zwischenraum am Anfang ignoriert. Die Funktion speichert einen Zeiger auf einen nicht umgewandelten Rest der Zeichenkette bei *endp, falls endp nicht NULL ist. Falls das Ergebnis zu groß ist, (also bei overflow), wird als Resultat HUGE_VAL mit dem korrekten Vorzeichen geliefert; liegt das Ergebnis zu dicht bei Null (also bei underflow), wird Null geliefert. In beiden Fällen erhält errno den Wert ERANGE.

  long strtol(const char *s, char **endp, int base)

strtol wandelt den Anfang der Zeichenkette s in long um, dabei wird Zwischenraum am Anfang ignoriert. Die Funktion speichert einen Zeiger auf einen nicht umgewandelten Rest der Zeichenkette bei *endp, falls endp nicht NULL ist. Hat base einen Wert zwischen 2 und 36, erfolgt die Umwandlung unter der Annahme, daß die Eingabe in dieser Basis repräsentiert ist. Hat base den Wert Null, wird als Basis 8, 10 oder 16 verwendet; eine führende Null bedeutet dabei oktal und 0x oder 0X zeigen eine hexadezimale Zahl an. In jedem Fall stehen Buchstaben für die Ziffern von 10 bis base-l; bei Basis 16 darf 0x oder 0X am Anfang stehen. Wenn das Resultat zu groß werden würde, wird je nach Vorzeichen LONG_MAX oder LONG_MIN geliefert und errno erhält den Wert ERANGE.

  unsigned long strtoul(const char *s, char **endp, int base)

strtoul funktioniert wie strtol, nur ist der Resultattyp unsigned long und der Fehlerwert ist ULONG_MAX.

  int rand(void)

rand liefert eine ganzzahlige Pseudo-Zufallszahl im Bereich von 0 bis RAND_MAX; dieser Wert ist mindestens 32767.

  void srand(unsigned int seed)

srand benutzt seed als Ausgangswert für eine neue Folge von Pseudo-Zufallszahlen. Der erste Ausgangswert ist 1.

  void *calloc(size_t nobj, size_t size)

calloc liefert einen Zeiger auf einen Speicherbereich für einen Vektor von nobj Objekten, jedes mit der Größe size, oder NULL, wenn die Anforderung nicht erfüllt werden kann. Der Bereich wird mit Null-Bytes initialisiert.

  void *malloc(size_t size)

malloc liefert einen Zeiger auf einen Speicherbereich für ein Objekt der Größe size oder NULL, wenn die Anforderung nicht erfüllt werden kann. Der Bereich ist nicht initialisiert.

  void *realloc(void *p, size_t size)

realloc ändert die Größe des Objekts, auf das p zeigt, in size ab. Bis zur kleineren der alten und neuen Größe bleibt der Inhalt unverändert. Wird der Bereich für das Objekt größer, so ist der zusätzliche Bereich uninitiatisiert. realloc liefert einen Zeiger auf den neuen Bereich oder NULL, wenn die Anforderung nicht erfüllt werden kann; in diesem Fall ist *p unverändert.

  void free(void *p)

free gibt den Bereich frei, auf den p zeigt; die Funktion hat keinen Effekt, wenn p den Wert NULL hat. p muß auf einen Bereich zeigen, der zuvor mit calloc, malloc oder realloc angelegt wurde.

  void abort(void)

abort sorgt für eine anormale Beendigung des Programms im Stil von raise(SIGABRT).

  void exit(int status)

exit beendet das Programm normal. atexit-Funktionen werden in umgekehrter Reihenfolge ihrer Hinterlegung aufgerufen, die Puffer offener Dateien werden geschrieben, offene Ströme werden abgeschlossen, und die Kontrolle geht an die Umgebung des Programms zurück. Wie status an die Umgebung des Programms geliefert wird, hängt von der Implementierung ab, aber Null gilt als erfolgreiches Ende. Die Werte EXIT_SUCCESS und EXIT_FAILURE können ebenfalls angegeben werden.

  int atexit(void (*fcn)(void))

atexit hinterlegt die Funktion fcn, damit sie aufgerufen wird, wenn das Programm normal endet, und liefert einen von Null verschiedenen Wert, wenn die Funktion nicht hinterlegt werden kann.

  int system(const char *s)

system liefert die Zeichenkette s an die Umgebung zur Ausführung. Hat s den Wert NULL, so liefert system einen von Null verschiedenen Wert, wenn es einen Kommandoprozessor gibt. Wenn s von NULL verschieden ist, dann ist der Resultatwert implementierungsabhängig.

  char *getenv(const char *name)

getenv liefert die zu name gehörende Zeichenkette aus der Umgebung oder NULL, wenn keine Zeichenkette existiert. Die Details hängen von der Implementierung ab.

  void *bsearch(const void *key, const void *base, size_t n, size_t size, 
	int (*cmp)(const void *keyval, const void *datum))

bsearch durchsucht base[0] ... base[n-l] nach einem Eintrag, der gleich *key ist. Die Funktion cmp muß einen negativen Wert liefern, wenn ihr erstes Argument (der Suchschlüssel) kleiner als ihr zweites Argument (ein Tabelleneintrag) ist, Null, wenn beide gleich sind, und sonst einen positiven Wert. Die Elemente des Vektors base müssen aufsteigend sortiert sein. bsearch liefert einen Zeiger auf das gefundene Element oder NULL, wenn keines existiert.

  void qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *))

qsort sortiert einen Vektor base[0] ... base[n-1] von Objekten der Größe size in aufsteigender Reihenfolge. Für die Vergleichsfunktion cmp gilt das gleiche wie bei bsearch.

  int abs(int n)

abs liefert den absoluten Wert seines int Arguments.

  long labs(long n)

labs liefert den absoluten Wert seines long Arguments.

  div_t div(int num, int denom)

div berechnet Quotient und Rest von num/denom. Die Resultate werden in den int Komponenten quot und rem einer Struktur vom Typ div_t abgelegt.

  ldiv_t ldiv(long num, long denom)

div berechnet Quotient und Rest von num/denom. Die Resultate werden in den long Komponenten quot und rem einer Struktur vom Typ ldiv_t abgelegt.


[ Anfang der Seite | Inhaltsverzeichnis | Funktions-Register Header-Register ]

 

15. November 1999, Peter Klingebiel, DVZ