C-Programmierung: Standard Header

Aus Wikibooks

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Inhaltsverzeichnis

[Bearbeiten] Einführung in die Standard Header

Die 16 ANSI C (C89) und 3 weiteren ISO C (C94/95) Header sind auch ein Teil der C++ Standard Template Library, die neuen ISO C (C99) jedoch nicht. Wer gezwungen ist einen C++ Compiler zu benutzen oder daran denkt, sein Programm später von C nach C++ zu portieren, sollte die C99-Erweiterungen nicht benutzen.

Weitere Hintergrundinformationen zur Standardbibliothek finden Sie in der Wikipedia.

[Bearbeiten] ANSI C (C89)/ISO C (C90) Header

[Bearbeiten] assert.h

Testmöglichkeiten und Fehlersuche.

[Bearbeiten] ctype.h

Die Datei ctype.h enthält diverse Funktionen mit denen sich einzelne Zeichen überprüfen lassen oder umgewandelt werden können.

[Bearbeiten] Übersicht

Der Header ctype.h enthält diverse Funktionen, mit denen sich einzelne Zeichen überprüfen lassen oder umgewandelt werden können. Die Funktionen liefern einen von 0 verschiedenen Wert, wenn c die Bedingung erfüllt, andernfalls liefern sie 0:

  • int isalnum(int c) testet auf alphanumerisches Zeichen (a-z, A-Z, 0-9)
  • int isalpha(int c) testet auf Buchstabe (a-z, A-Z)
  • int iscntrl(int c) testet auf Steuerzeichen (\f, \n, \t ...)
  • int isdigit(int c) testet auf Dezimalziffer (0-9)
  • int isgraph(int c) testet auf druckbare Zeichen
  • int islower(int c) testet auf Kleinbuchstaben (a-z)
  • int isprint(int c) testet auf druckbare Zeichen ohne Leerzeichen
  • int ispunct(int c) testet auf druckbare Interpunktionszeichen
  • int isspace(int c) testet auf Zwischenraumzeichen (Leerzeichen, \f, \n, \t ...)
  • int isupper(int c) testet auf Grossbuchstaben (A-Z)
  • int isxdigit(int c) testet auf hexadezimale Ziffern (0-9, a-f, A-F)
  • int isblank(int c) testet auf Leerzeichen

Zusätzlich sind noch zwei Funktionen für die Umwandlung in Groß- bzw. Kleinbuchstaben definiert:

  • int tolower(int c) wandelt Gross- in Kleinbuchstaben um
  • int toupper(int c) wandelt Klein- in Grossbuchstaben um

[Bearbeiten] Häufig gemachte Fehler

Wie Sie vielleicht sehen, erwarten die Funktionen aus <ctype.h> als Parameter einen int, obwohl es eigentlich ein char sein sollte. Immerhin arbeiten die Funktionen ja mit Zeichen.

Die Ursache hierfür liegt ca. 30 Jahre zurück, als C noch in den Kinderschuhen steckte. Damals war es nicht möglich, Funktionen zu definieren, die einen char übergeben bekommen. Die einzigen erlaubten Datentypen waren int, long, double und Zeiger. Daher kommt also das int in der Funktionsdefinition.

Der andere Fallstrick ist, wie diese Funktionen das c interpretieren, das sie übergeben bekommen. Laut dem C-Standard muß c entweder »als unsigned char repräsentierbar oder der Wert des Makros EOF sein«. Ansonsten ist das Verhalten undefiniert. Das alleine ist noch nicht schlimm. Aber: in C gibt es drei verschiedene Arten von char-Datentypen: char, signed char und unsigned char. Dabei ist char entweder signed char oder unsigned char.

In einer Umgebung mit Zweierkomplementdarstellung, in der ein char 8 Bit groß ist (ja, es gibt auch andere), geht der Wertebereich von signed char von -128 bis +127, der von unsigned char von 0 bis 255. Gerade auf der i386-Architektur ist es üblich, char mit signed char gleichzusetzen. Wenn man jetzt noch annimmt, dass der Zeichensatz ISO-8859-1 (latin1) oder Unicode/UTF-8 ist, darf man diesen Funktionen keine Strings übergeben, die möglicherweise Umlaute enthalten. Ein typisches Beispiel, bei dem das dennoch geschieht, ist:

int all_spaces(const char *s)
{
  while (*s != '\0') {
    if (isspace(*s))       /* FEHLER */
      return 0;
  }
  return 1;
}

Der Aufruf von all_spaces("Hallöle") führt dann zu undefiniertem Verhalten. Um das zu vermeiden, muss man das Argument der Funktion isspace in einen unsigned char umwandeln. Das geht zum Beispiel so:

    if (isspace((unsigned char) *s))

[Bearbeiten] errno.h

Die Headerdatei enthält Funktionen zum Umgang mit Fehlermeldungen und die globale Variable errno, welche die Fehlernummer des zuletzt aufgetretenen Fehlers implementiert.

[Bearbeiten] float.h

Die Datei float.h enthält Definitionen zur Bearbeitung von Fließkommazahlen in C.

Der Standard definiert eine Gleitkommazahl nach dem folgenden Modell (in Klammern die symbolischen Konstanten für den Typ float):

x = sb^e \sum_{k=1}^p f_k \cdot b^{-k}, e_{min} \le e \le e_{max}

  • s = Vorzeichen
  • b = Basis ( FLT_RADIX )
  • e = Exponent (Wert zwischen FLT_MIN und FLT_MAX )
  • p = Genauigkeit ( FLT_MANT_DIG )
  • fk = nichtnegative Ganzzahl kleiner b

Der Standard weist darauf hin, dass hierbei nur um ein Beschreibung der Implementierung von Fließkommazahlen handelt und sich von der tatsächlichen Implementierung unterscheidet.

Mit float.h stehen folgende Gleitkommatypen zur Verfügung:

  • float
  • double
  • long double

Für alle Geleitkommtypen definierte symbolische Konstanten:

  • FLT_RADIX (2) Basis
  • FLT_ROUND Erhält die Art der Rundung einer Implementierung:
    • -1 unbestimmt
    • 0 in Richtung 0
    • 1 zum nächsten Wert
    • 2 in Richtung plus unendlich
    • 3 in Richtung minus unendlich

Die symbolische Konstante FLT_ROUND kann auch andere Werte annehmen, wenn die Implementierung ein anderes Rundungsverfahren benutzt.

Für den Typ Float sind definiert:

  • FLT_MANT_DIG Anzahl der Ziffern in der Matisse
  • FLT_DIG (6) Genauigkeit in Dezimalziffern
  • FLT_EPSILON (1E-5) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0
  • FLT_MAX (1E+37) größte Zahl, die der Typ float darstellen kann
  • FLT_MIN (1E-37) kleinste Zahl größer als 0, die der Typ float noch darstellen kann
  • FLT_MAX_EXP Minimale Größe des Exponent
  • FLT_MIN_EXP Maximale Größe des Exponent

Für den Typ Double sind definiert:

  • DBL_MANT_DIG Anzahl der Ziffern in der Matisse
  • DBL_DIG (10) Genauigkeit in Dezimalziffern
  • DBL_EPSILON (1E-9) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0
  • DBL_MAX (1E+37) größte Zahl, die der Typ double darstellen kann
  • DBL_MIN (1E-37) kleinste Zahl größer als 0, die der Typ double noch darstellen kann
  • DBL_MAX_EXP Minimale Größe des Exponent
  • DBL_MIN_EXP Maximale Größe des Exponent

Für den Typ Long Double sind definiert:

  • LDBL_MANT_DIG Anzahl der Ziffern in der Matisse
  • LDBL_DIG (10) Genauigkeit in Dezimalziffern
  • LDBL_EPSILON (1E-9) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0
  • LDBL_MAX (1E+37) größte Zahl, die der Typ long double darstellen kann
  • LDBL_MIN (1E-37) kleinste Zahl größer als 0, die der Typ long double noch darstellen kann
  • LDBL_MAX_EXP Minimale Größe des Exponent
  • LDBL_MIN_EXP Maximale Größe des Exponent

[Bearbeiten] limits.h

Enthält die implementierungsspezifischen Minimal- und Maximalwerte für die einzelnen Datentypen.

Die Headerdatei erhält die Werte, die ein Typ auf einer bestimmten Implementierung annehmen kann. In Klammern befinden sich die jeweiligen Mindestgrößen. Für den Typ char sind zwei unterschiedliche Größen angegeben, da es von der Implementierung abhängig ist, ob dieser vorzeichenbehaftet oder vorzeichenlos ist. Der Wertebereich ist immer asymmetrisch (z. B. -128, +127).

  • CHAR_BIT Anzahl der Bits in einem char (8 Bit)
  • SCHAR_MIN minimaler Wert, den der Typ signed char aufnehmen kann (-128)
  • SCHAR_MAX maximaler Wert, den der Typ signed char aufnehmen kann (+127)
  • UCHAR_MAX maximaler Wert, den der Typ unsigned char aufnehmen kann(+255)
  • CHAR_MIN minimaler Wert, den die Variable char aufnehmen kann (0 oder SCHAR_MIN)
  • CHAR_MAX maximaler Wert, den die Typ char aufnehmen kann (SCHAR_MAX oder UCHAR_MAX)
  • SHRT_MIN minimaler Wert, den der Typ short int annehmen kann (-32.768)
  • SHRT_MAX maximaler Wert, den der Typ short int annehmen kann (+32.767)
  • USHRT_MAX maximaler Wert, den der Typ unsigned short int annehmen kann (+65.535)
  • INT_MIN minimaler Wert, den der Typ int annehmen kann (-32.768)
  • INT_MAX maximaler Wert, den der Typ int annehmen kann (+32.767)
  • UINT_MAX maximaler Wert, den der Typ unsigned int aufnehmen kann(+65.535)
  • LONG_MIN minimaler Wert, den der Typ long int annehmen kann (-2.147.483.648)
  • LONG_MAX maximaler Wert, den der Typ long int annehmen kann (+2.147.483.647)
  • ULONG_MAX maximaler Wert, den der Typ unsigned long int annehmen kann (+4.294.967.295)
  • LLONG_MIN minimaler Wert, den der Typ long long int annehmen kann (–9.223.372.036.854.775.808)
  • LLONG_MAX maximaler Wert, den der Typ long long int annehmen kann (+9.223.372.036.854.775.807)
  • ULLONG_MAX maximaler Wert, den der Typ unsigned long long int annehmen kann (+18.446.744.073.709.551.615)

[Bearbeiten] locale.h

Länderspezifische Eigenheiten wie Formatierungen und Geldbeträge.

[Bearbeiten] math.h

Die Datei math.h enthält diverse höhere mathematische Funktionen, wie z.B. die Wurzeln, Potenzen, Logarithmen und anderes. Sie wird für Berechnungen gebraucht, welche nicht, oder nur umständlich, mit den Operatoren +, -, *, /, % ausgerechnet werden können.

Die Datei math.h enthält diverse höhere mathematische Funktionen, wie z.B. die Wurzeln, Potenzen, Logarithmen und anderes. Sie wird fuer Berechnungen gebraucht, welche nicht, oder nur umständlich, mit den Operatoren +, -, *, /, % ausgerechnet werden können.

Trigonometrische Funktionen:

  • double cos(double x) Kosinus von x
  • double sin(double x) Sinus von x
  • double tan(double x) Tangens von x
  • double acos(double x) arccos(x)
  • double asin(double x) arcsin(x)
  • double atan(double x) arctan(x)
  • double cosh(double x) Cosinus Hyperbolicus von x
  • double sinh(double x) Sinus Hyperbolicus von x
  • double tanh(double x) Tangens Hyperbolicus von x

Logarithmusfunktionen:

  • double exp(double x) Exponentialfunktion (e hoch x)
  • double log(double x) natürlicher Logarithmus (Basis e)
  • double log10(double x) dekadischer Logarithmus (Basis 10)

Potenzfunktionen:

  • double sqrt(double x) Quadratwurzel von x
  • double pow(double x, double y) Berechnet xy

[Bearbeiten] setjmp.h

Ermöglicht Funktionssprünge.

[Bearbeiten] signal.h

Ermöglicht das Reagieren auf unvorhersehbare Ereignisse.

Die Datei signal.h enthält Makros für bestimmte Ereignisse, wie Laufzeitfehler und Unterbrechungsanforderungen und Funktionen, um auf diese Ereignisse zu reagieren.

[Bearbeiten] stdarg.h

Die Datei stdarg.h enthält Makros und einen Datentyp zum Arbeiten mit variablen Parameterlisten.

  • va_list: Datentyp für einen Zeiger auf eine variable Parameterliste
  • void va_start(va_list par_liste, letzter_par); initialisiert die Parameterliste anhand des letzten Parameters letzter_par und assoziiert sie mit par_liste
  • type va_arg(va_list par_liste, type); liefert den nächsten Parameter der mit par_liste assoziierten Parameterliste mit dem spezifiziertem Typ type zurück
  • void va_end(va_list par_liste); gibt den von der variablen Parameterlist par_liste belegten Speicherplatz frei


[Bearbeiten] stddef.h

Allgemein benötigte Definitionen.

[Bearbeiten] size_t

Implementierungsanhängiger, vorzeichenloser, ganzzahliger Variablentyp.

[Bearbeiten] NULL

Das Macro repäsentiert ein Speicherbereich, der nicht gültig ist. Eine mögliche Implementierung des Macro lautet:

#ifndef NULL
 #define NULL ((void *) 0)
#endif 



[Bearbeiten] stdio.h

Die Datei stdio.h enthält Funktionen zum Arbeiten mit Dateien und zur formatierten und unformatierten Eingabe und Ausgabe von Zeichenketten.

Die Datei stdio.h enthält diverse Standard-Input-Output-Funktionen (daher der Name).

[Bearbeiten] FILE

dieses Macro wird gebraucht, um die Ein- und Ausgabe in Streams zu realisieren, in dem mit FILE ein Filepointer erzeugt wird, der die gesamte I/O in den Stream repräsentiert.

[Bearbeiten] NULL

Das Macro für einen Pointer auf einen nicht existieren Speicherbereich wie es auch in stddef.h definiert ist.

[Bearbeiten] BUFSIZE

dieses Macro definiert die implementierungsspezifische Maximalgröße, die mit setbuf gewählt werden kann als Integerwert.

[Bearbeiten] FOPEN_MAX

Enthält als Integer die Anzahl der möglichen gleichzeitigen geöffneten Filepointer, welche diese Implementierung erlaubt.

[Bearbeiten] FILENAME_MAX

Enthält als Integerwert die Maximallänge von Dateinamen mit den die Implementierung sicher umgehen kann.

[Bearbeiten] stdin

Ist ein immer vorhandener geöffneter Filepointer auf den Standardeingabe Stream.

[Bearbeiten] stdout

Ist ein immer vorhandener geöffneter Filepointer auf den Standardausgabe Stream.

[Bearbeiten] stderr

Ist ein immer vorhandener geöffneter Filepointer auf den Fehlerausgabe-Stream. Lassen Sie sich bitte nicht dadurch verwirren, dass meistens stderr auch auf der Konsole landet: Der Stream ist nicht nicht der gleiche wie stdout.

[Bearbeiten] EOF (End of File)

negativer Wert vom Typ int und wird von einigen Funktionen zurückgegeben, wenn das Ende eines Streams erreicht wurde.

[Bearbeiten] int printf (const char *format, ...)

entspricht fprintf(stdout, const char* format, ...)

Die Umwandlungsangaben (engl. conversion specification) besteht aus den folgenden Elementen:
  • einem Flag
  • der Feldbreite (engl. field width)
  • der durch einen Punkt getrennte Genauigkeit (engl. precision)
  • eine Längenangabe (engl. length modifier)
  • das Umwandlungszeichen (engl. conversion modifier)
Die Flags haben die folgende Bedeutung:
  • - (Minus): Der Text wird links ausgerichtet. Wird das Flag nicht gesetzt, so wird der Text rechts ausgerichtet.
  • + (Plus): Es in jedem Fall ein Vorzeichen ausgegeben und zwar auch dann, wenn die Zahl positiv ist.
  • Leerzeichen: Ein Leerzeichen wird ausgegeben. Wenn sowohl + wie auch das Leerzeichen benutzt werden, dann wird die Kennzeichnung nicht beachtet und es wird kein Leerzeichen ausgegeben.
  • # : Welche Wirkung das Kennzeichen # hat, ist abhängig vom verwendeten Format: Wenn ein Wert über %x als Hexadezimal ausgegeben wird, so wird jedem Wert ein 0x vorangestellt (außer der Wert ist 0).
  • 0 : Die Auffüllung erfolgt mit Nullen anstelle von Leerzeichen, wenn die Feldbreite verändert wird.
Mögliche Umwandlungszeichen:
  • a% ,  %A : double im Format [-]0xh.hhhhp±d. Wird  %a verwendet, so werden die Buchstaben a bis f als abcdef ausgegeben, wenn  %A verwendet wird, dann werden die Buchstaben a bis f als ABCDEF ausgegeben. (neu im C99 Standard)
  •  %c : int umgewandelt in ein unsigned char und als Zeichen interpretiert.
  •  %d /  %i : int im Format [-]dddd .
  •  %e ,  %E : double in Format [-]d.ddd e±dd bzw. [-]d.ddd E±dd . Die Anzahl der Stellen nach dem Dezimalpunkt entspricht der Genauigkeit. Fehlt die Angabe, so ist sie standardmäßig 6. Ist die Genauigkeit 0 und das # Flag nicht gesetzt, so entfällt der Dezimalpunkt. Der Exponent besteht immer aus mindestens zwei Ziffern. Sind mehr Ziffern zur Darstellung notwendig, so werden nur so viele wie unbedingt notwendig angezeigt. Wenn der darzustellende Wert 0 ist, so ist auch der Exponent 0.
  •  %f ,  %F : double im Format [-]ddd.ddd . Die Anzahl der Stellen nach dem Dezimalpunkt entspricht der Genauigkeit. Fehlt die Angabe, so ist sie Standardmäßig 6. Ist die Genauigkeit 0 und das # Flag nicht gesetz ist, so entfällt der Dezimalpunkt.
  •  %g ,  %G : Ein double Argument im Stil von d bzw. E ausgegeben, allerdings nur, wenn der Exponent kleiner als -4 ist oder größer / gleich der Genauigkeit. Ansonsten wird das Argument im Stil von  %f ausgegeben.
  •  %n : Das Argument muss ein vorzeichenbehafteter Zeiger sein, in den die Anzahl der auf dem Ausgabestrom geschriebenen Zeichen abgelegt wird.
  •  %o : int als Oktalzahl im Format [-]dddd ausgegeben.
  •  %p : void* . Der Wert des Zeigers umgewandelt in einer darstellbare Folge von Zeichen, wobei die genau Darstellung von der Implementierung abhängig ist.
  •  %s  : Das Argumente sollten ein Zeiger auf das erste Element eines Zeichenarray sein. Die nachfolgenden Zeichen werden bis zum \0 ausgegeben.
  •  %u : unsigned int im Format dddd
  •  %X ,  %x : int im Hexadezimalsystem im Format [-]dddd ausgegeben. Wird  %x verwendet, so werden die Buchstaben a bis f als abcdef ausgegeben, wenn  %X verwendet wird, dann werden die Buchstaben a bis f als ABCDEF ausgegeben. Wird das # Flag gesetzt, dann erscheint die Ausgabe der Hexadezimalzahl mit einem vorangestellten "0x" (außer der Wert ist 0).
  •  %% Ein Prozentzeichen wird ausgegeben


Wenn eine Umwandlungsangabe ungültig ist oder ein Argument nicht dem richten Typ entspricht, so ist das Verhalten undefiniert.

[Bearbeiten] int fprintf(FILE *fp,const char *format,...)

Die Funktion macht das gleiche wie die Funktion printf . Allerdings nicht nach stdout sondern in einen Stream, die über den Filepointer fp übergeben würde.

[Bearbeiten] int snprintf(char *dest, size_t destsize, const char *format, ...)

Die Funktion snprintf() formatiert die in ... angegebenen Argumente gemäß der printf-Formatierungsvorschrift format und schreibt das Ergebnis in den durch dest angegebenen String. destsize gibt die Maximallänge des Strings dest an. Der String in dest erhält in jedem Fall ein abschließendes Nullzeichen. In keinem Fall wird über dest[destsize - 1] hinausgeschrieben.

Der Rückgabewert ist die Anzahl der Zeichen, die geschrieben worden wäre, wenn der String dest lang genug gewesen wäre.

Um Pufferüberläufe zu vermeiden, sollte diese Funktion gegenüber strcpy, strcat, strncpy und strncat vorgezogen werden, da es bei letzteren Funktionen aufwendig ist, über den noch verfügbaren Platz im String Buch zu führen.

[Bearbeiten] Beispielcode

Das folgende Programm erwartet zwei Argumente auf der Kommandozeile. Diese Argumente werden zu einem Dateinamen, bestehend aus Verzeichnisname und Dateiname, zusammengesetzt und ausgegeben. Falls der Dateiname zu lang für den Puffer wird, wird eine Fehlermeldung ausgegeben.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
  char fname[256];

  if (argc == 3) {
    if (snprintf(fname, sizeof(fname), "%s/%s", argv[1], argv[2]) >= sizeof(fname)) {
      fprintf(stderr, "Fehler: Dateiname zu lang.\n");
      exit(EXIT_FAILURE);
    }
    printf("%s\n", fname);
  }
  return EXIT_SUCCESS;
}

Besonders zu beachten sind die folgenden Punkte:

  • Für den Parameter destsize von snprintf() wird der Wert durch den sizeof-Operator berechnet und nicht etwa direkt angegeben. Dadurch muss bei späteren Änderungen die 256 nur an genau einer Stelle verändert werden. Das beugt Fehlern vor.
  • Wenn der Rückgabewert von snprintf() mindestens so groß wie sizeof(fname) ist, bedeutet das, dass 256 reguläre Zeichen und das abschließende Nullzeichen in den Puffer geschrieben werden sollten. Dafür ist aber kein Platz gewesen, und es wurde ein Teil des Strings abgeschnitten.

[Bearbeiten] int sprintf(char *dest,const char *format,...)

Achtung! Da diese Funktion nicht die Länge prüft kann es zum Pufferüberlauf kommen! Deshalb sollte besser snprintf verwendet werden. Wenn dennoch diese Funktion genutzt wird, schreibt sie in den String dest den Formatstring format und gegebenenfalls die weiteren Parameter.

[Bearbeiten] int vprintf(const char *format,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vprintf ist äquivalent zu der Funktion printf außer dass ein variable Argumentenliste anstelle des ‘‘...’’-Operators genutzt wird. Achtung diese Funktion ruft nicht das Makro va_end. Der Inhalt von list ist deshalb nach dem Funktionsaufruf undefiniert ! Nach der Funktion sollte die rufende Instanz deshalb unbedingt das Makro va_end als nächstes aufrufen.

[Bearbeiten] int vfprintf(FILE *stream,const char *format,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vfprintf ist äquivalent zu der Funktion fprintf außer dass ein variable Argumentenliste anstelle des ...-Operators genutzt wird. Achtung diese Funktion ruft nicht das Makro va_end. Der Inhalt von list ist deshalb nach dem Funktionsaufruf undefiniert! Nach der Funktion sollte die rufende Instanz deshalb unbedingt das Makro va_end als nächstes aufrufen.

[Bearbeiten] int vsprintf(char *dest,const char *format,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vsprintf ist äquivalent zu der Funktion sprintf außer dass ein variable Argumentenliste anstelle des ‘‘...’’-Operators genutzt wird. Achtung diese Funktion ruft nicht das Makro va_end. Der Inhalt von list ist deshalb nach dem Funktionsaufruf undefiniert ! Nach der Funktion sollte die rufende Instanz deshalb unbedingt das Makro va_end als nächstes aufrufen.

[Bearbeiten] int vsnprintf(char *dest,size_t destsize,const char *format,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vsnprintf ist äquivalent zu der Funktion snprintf außer dass ein variable Argumentenliste anstelle des ‘‘...’’-Operators genutzt wird. Achtung diese Funktion ruft nicht das Makro va_end. Der Inhalt von list ist deshalb nach dem Funktionsaufruf undefiniert! Nach der Funktion sollte die rufende Instanz deshalb unbedingt das Makro va_end als nächstes aufrufen.

[Bearbeiten] int scanf (const char *formatString, ...)

entspricht fscanf(stdin, const char* formatString, ...)

[Bearbeiten] int fscanf(FILE *fp,const char *format,...)

Die Funktion fscanf(FILE *fp,const char *format); liest, eine Eingabe aus den mit fp übergebenen Stream. Über den Formatstring format wird fscanf mitgeteilt welchen Datentyp die einzelnen Elemente haben, die über Zeiger mit den Werten der Eingabe gefüllt werden. Der Rückgabe wert der Funktion ist die Anzahl der Erfolgreich eingelesen Datentypen und im Fehlerfall der Wert der Konstante EOF .

[Bearbeiten] int sscanf(const char *src,const *format,...)

Die Funktion ist äquivalent zu fscanf , außer dass die Eingabe aus den String src gelesen wird.

[Bearbeiten] int vscanf(const char *fromat,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vscanf ist äquivalent zu der Funktion scanf außer dass mit einer Argumenten Liste gearbeitet wird. Achtung es wird nicht das Makro va_end aufgerufen. Der Inhalt von list ist nach der Funktion undefiniert!

[Bearbeiten] int vsscanf(const char *src,const char *fromat,va_list list)

Es wird zusätzlich der Header stdarg.h benötigt ! Die Funktion vsscanf ist äquivalent zu der Funktion sscanf außer dass mit einer Argumenten Liste gearbeitet wird. Achtung es wird nicht das Makro va_end gerufen der Inhalt von list ist nach der Funktion undefiniert!

[Bearbeiten] int fgetc(FILE *stream)

Die Funktion fgetc(stream); liefert das nächste Zeichen im Stream oder im Fehlerfall EOF .


[Bearbeiten] stdlib.h

Die Datei stdlib.h enthält Funktionen zur Umwandlung von Variablentypen, zur Erzeugung von Zufallszahlen, zur Speicherverwaltung, für den Zugriff auf die Systemumgebung, zum Suchen und Sortieren, sowie für die Integer-Arithmetik (z. B. die Funktion abs für den Absolutbetrag eines Integers).


[Bearbeiten] EXIT_SUCCESS

Diese Macro enthält den Implementierungsspezifischen Rückgabewert für ein erfolgreich ausgeführtes Programm.

[Bearbeiten] EXIT_FAILURE

Diese Macro enthält den Implentierungsspezifischen Rückgabewert für ein fehlerhaft beendetes Programm.

[Bearbeiten] NULL

das Macro repräsentiert ein Zeiger auf ein nicht gültigen Speicherbereich wie in stddef.h erklärt wird.

[Bearbeiten] RAND_MAX

Das Makro ist implementierungsabhängig und gibt den Maximalwert den die Funktion rand() zurück geben kann.

[Bearbeiten] double atof (const char *nptr)

Wandelt den Anfangsteil (gültige Zahlendarstellung) einer Zeichenfolge, auf die nptr zeigt, in eine double-Zahl um.

[Bearbeiten] int atoi (const char *nptr)

Wandelt den Anfangsteil (gültige Zahlendarstellung) einer Zeichenfolge, auf die nptr zeigt, in eine int-Zahl um.

[Bearbeiten] long atol (const char *nptr)

Wandelt den Anfangsteil (gültige Zahlendarstellung) einer Zeichenfolge, auf die nptr zeigt, in eine long int-Zahl um.

[Bearbeiten] void exit(int fehlercode)

Beendet das Programm

[Bearbeiten] int rand(void)

Liefert eine Pseudo-Zufallszahl im Bereich von 0 bis RAND_MAX .

[Bearbeiten] long int strtol(const restrict char* nptr, char** restrict endp, int base);

Die Funktion strtol (string to long) wandelt den Anfang einer Zeichenkette nptr in einen Wert des Typs long int um. In endp wird ein Zeiger in *endp auf den nicht umgewandelten Rest abgelegt, sofern das Argument ungleich NULL ist.
Die Basis legt fest, um welches Stellenwertsystem es sich handelt. (2 für das Dualsystem, 8 für das Oktalsystem, 16 für das Hexadezimalsystem und 10 für das Dezimalsystem). Die Basis kann Werte zwischen 2 und 36 sein. Die Buchstaben von a (bzw. A) bis z (bzw. Z) repräsentieren die Werte zwischen 10 und 35. Es sind nur Ziffern und Buchstaben erlaubt, die kleiner als base sind. Ist der Wert für base 0, so wird entweder die Basis 8 ( nptr beginnt mit 0), 10 ( nptr beginnt mit einer von 0 verschiedenen Ziffer) oder 16 ( nptr beginnt mit 0x oder 0X) verwendet. Ist die Basis 16, so zeigt eine vorangestelltes 0x bzw. 0X an, dass es sich um eine Hexadezimalzahl handelt. Wenn nptr mit einem Minuszeichen beginnt, ist der Rückgabewert negativ.
Ist die übergebene Zeichenkette leer oder hat nicht die erwartete Form, wird keine Konvertierung durchgeführt und 0 wird zurückgeliefert. Wenn der korrekte Wert größer als der darstellbare Wert ist, wird LONG_MAX zurückgegeben, ist er kleiner wird LONG_MIN zurückgegeben und das Makro ERANGE wird in errno abgelegt.

[Bearbeiten] long long int strtoll(const restrict char* nptr, char** restrict endp, int base);

(neu in C99 eingeführt)

Die Funktion entspricht strtol mit dem Unterschied, das der Anfang des Strings nptr in einen Wert des Typs long long int umgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wird LLONG_MAX zurückgegeben, ist er kleiner, wird LLONG_MIN zurückgegeben.

[Bearbeiten] unsigned long int strtoul(const restrict char* nptr, char** restrict endp, int base);

Die Funktion entspricht strtol mit dem Unterschied, das der Anfang des Strings nptr in einen Wert des Typs ungsigned long int umgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wird ULONG_MAX zurückgegeben.

[Bearbeiten] unsigned long long int strtoull(const restrict char* nptr, char** restrict endp, int base);

(neu in C99 eingeführt)

Die Funktion entspricht strtol mit dem Unterschied, das der Anfang des Strings nptr in einen Wert des Typs ungsigned long long int umgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wird ULLONG_MAX zurückgegeben.

[Bearbeiten] void* malloc(size_t size)

Die Funktion fordert vom System size byte an speicher an und gibt im Erfolgsfall einen Zeiger auf den Beginn des Bereiches zurück, im Fehlerfall NULL.

[Bearbeiten] void free(void *ptr)

Gibt den dynamischen Speicher, der durch ptr repräsentiert wurde wieder frei.

[Bearbeiten] int system(const char* command);

Führt den mit command angegebenen Befehl als Shell-Befehl aus und gibt den Rückgabewert des ausgeführten Prozesses zurück.


[Bearbeiten] string.h

Die Datei string.h enthält Funktionen zum Bearbeiten und Testen von Zeichenketten.



[Bearbeiten] time.h

time.h enthält Kalender- und Zeitfunktionen.

  • time_t Arithmetischer Typ, der die Kalenderzeit repräsentiert.
  • time_t time(time_t *tp) Liefert die aktuelle Kalenderzeit. Kann keine Kalenderzeit geliefert werden, so wird der Wert –1 zurückgegeben. Als Übergabeparameter kann ein Zeiger übergeben werden, der nach Aufruf der Funktion ebenfalls die Kalenderzeit liefert. Bei NULL wird dem Zeiger kein Wert zugewiesen.


[Bearbeiten] Neue Header in ISO C (C94/C95)

[Bearbeiten] iso646.h

Folgende Makros sind im Header <iso646.h> definiert, die als alternative Schreibweise für die logischen Operatoren verwendet werden können:

Makro Operator
and &&
and_eq &=
bitand &
compl ~
not  !
not_eq  !=
or ||
or_eq |=
xor ^
xor_eq ^=

[Bearbeiten] wchar.h

  • int fwprintf(FILE *stream, const wchar_t *format, ...) ;:
wide character Variante von fprintf
  • int fwscanf(FILE *stream, const wchar_t *format, ...); :
wide character Variante von fscanf
  • wprinf(const wchar_t *format, ... ); :
wide character Variante von printf
  • wscanf(const wchar_t *format, ...); :
wide character :Variante von scanf
  • wint_t getwchar(void); :
wide character Variante von getchar
  • wint_t putwchar(wchar_t c); :
wide character Variante von putchar
  • wchar_t *wcscpy(wchar_t *s1, const wchar_t *s2) ; :
wide character Variante von strcpy
  • wchar_t *wcscat(wchar_t *s1, const wchar_t *s2); :
wide character Variante von strcat
  • wchar_t *wcscmp(const wchar_t *s1, const wchar_t *s2); : _
wide character Variante von strcmp
  • size_t wcslen(const wchar_t *s); :
wide character Variante von strlen

[Bearbeiten] wctype.h

[Bearbeiten] Neue Header in ISO C (C99)

[Bearbeiten] complex.h

[Bearbeiten] fenv.h

[Bearbeiten] inttypes.h

[Bearbeiten] stdbool.h

Definiert den logischen Typ

bool

für die Verwendung.

[Bearbeiten] stdint.h

[Bearbeiten] tgmath.h

Persönliche Werkzeuge