C-Programmierung: Standard Header
Aus Wikibooks
[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 Zeichenint islower(int c)testet auf Kleinbuchstaben (a-z)int isprint(int c)testet auf druckbare Zeichen ohne Leerzeichenint ispunct(int c)testet auf druckbare Interpunktionszeichenint 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 umint 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):

- s = Vorzeichen
- b = Basis (
FLT_RADIX) - e = Exponent (Wert zwischen
FLT_MINundFLT_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) BasisFLT_ROUNDErhä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_DIGAnzahl der Ziffern in der MatisseFLT_DIG(6) Genauigkeit in DezimalziffernFLT_EPSILON(1E-5) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0FLT_MAX(1E+37) größte Zahl, die der Typ float darstellen kannFLT_MIN(1E-37) kleinste Zahl größer als 0, die der Typ float noch darstellen kannFLT_MAX_EXPMinimale Größe des ExponentFLT_MIN_EXPMaximale Größe des Exponent
Für den Typ Double sind definiert:
DBL_MANT_DIGAnzahl der Ziffern in der MatisseDBL_DIG(10) Genauigkeit in DezimalziffernDBL_EPSILON(1E-9) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0DBL_MAX(1E+37) größte Zahl, die der Typ double darstellen kannDBL_MIN(1E-37) kleinste Zahl größer als 0, die der Typ double noch darstellen kannDBL_MAX_EXPMinimale Größe des ExponentDBL_MIN_EXPMaximale Größe des Exponent
Für den Typ Long Double sind definiert:
LDBL_MANT_DIGAnzahl der Ziffern in der MatisseLDBL_DIG(10) Genauigkeit in DezimalziffernLDBL_EPSILON(1E-9) kleinste Zahl x für die gilt 1.0 + x ≠ 1.0LDBL_MAX(1E+37) größte Zahl, die der Typ long double darstellen kannLDBL_MIN(1E-37) kleinste Zahl größer als 0, die der Typ long double noch darstellen kannLDBL_MAX_EXPMinimale Größe des ExponentLDBL_MIN_EXPMaximale 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_BITAnzahl der Bits in einem char (8 Bit)SCHAR_MINminimaler Wert, den der Typ signed char aufnehmen kann (-128)SCHAR_MAXmaximaler Wert, den der Typ signed char aufnehmen kann (+127)UCHAR_MAXmaximaler Wert, den der Typ unsigned char aufnehmen kann(+255)CHAR_MINminimaler Wert, den die Variable char aufnehmen kann (0 oder SCHAR_MIN)CHAR_MAXmaximaler Wert, den die Typ char aufnehmen kann (SCHAR_MAX oder UCHAR_MAX)SHRT_MINminimaler Wert, den der Typ short int annehmen kann (-32.768)SHRT_MAXmaximaler Wert, den der Typ short int annehmen kann (+32.767)USHRT_MAXmaximaler Wert, den der Typ unsigned short int annehmen kann (+65.535)INT_MINminimaler Wert, den der Typ int annehmen kann (-32.768)INT_MAXmaximaler Wert, den der Typ int annehmen kann (+32.767)UINT_MAXmaximaler Wert, den der Typ unsigned int aufnehmen kann(+65.535)LONG_MINminimaler Wert, den der Typ long int annehmen kann (-2.147.483.648)LONG_MAXmaximaler Wert, den der Typ long int annehmen kann (+2.147.483.647)ULONG_MAXmaximaler Wert, den der Typ unsigned long int annehmen kann (+4.294.967.295)LLONG_MINminimaler Wert, den der Typ long long int annehmen kann (–9.223.372.036.854.775.808)LLONG_MAXmaximaler Wert, den der Typ long long int annehmen kann (+9.223.372.036.854.775.807)ULLONG_MAXmaximaler 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 xdouble sin(double x)Sinus von xdouble tan(double x)Tangens von xdouble acos(double x)arccos(x)double asin(double x)arcsin(x)double atan(double x)arctan(x)double cosh(double x)Cosinus Hyperbolicus von xdouble sinh(double x)Sinus Hyperbolicus von xdouble 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 xdouble 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:doubleim Format[-]0xh.hhhhp±d. Wird%averwendet, so werden die Buchstaben a bis f als abcdef ausgegeben, wenn%Averwendet wird, dann werden die Buchstaben a bis f als ABCDEF ausgegeben. (neu im C99 Standard)%c:intumgewandelt in einunsigned charund als Zeichen interpretiert.%d/%i:intim Format[-]dddd.%e,%E:doublein Format[-]d.ddd e±ddbzw.[-]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:doubleim 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: EindoubleArgument im Stil vondbzw.Eausgegeben, allerdings nur, wenn der Exponent kleiner als -4 ist oder größer / gleich der Genauigkeit. Ansonsten wird das Argument im Stil von%fausgegeben.%n: Das Argument muss ein vorzeichenbehafteter Zeiger sein, in den die Anzahl der auf dem Ausgabestrom geschriebenen Zeichen abgelegt wird.%o:intals Oktalzahl im Format[-]ddddausgegeben.%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 intim Formatdddd%X,%x:intim Hexadezimalsystem im Format[-]ddddausgegeben. Wird%xverwendet, so werden die Buchstaben a bis f als abcdef ausgegeben, wenn%Xverwendet 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 Zeichenkettenptrin einen Wert des Typslong intum. Inendpwird ein Zeiger in*endpauf den nicht umgewandelten Rest abgelegt, sofern das Argument ungleichNULList.
- 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
basesind. Ist der Wert fürbase0, so wird entweder die Basis 8 (nptrbeginnt mit 0), 10 (nptrbeginnt mit einer von 0 verschiedenen Ziffer) oder 16 (nptrbeginnt mit 0x oder 0X) verwendet. Ist die Basis 16, so zeigt eine vorangestelltes 0x bzw. 0X an, dass es sich um eine Hexadezimalzahl handelt. Wennnptrmit 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_MAXzurückgegeben, ist er kleiner wirdLONG_MINzurückgegeben und das MakroERANGEwird inerrnoabgelegt.
[Bearbeiten] long long int strtoll(const restrict char* nptr, char** restrict endp, int base);
(neu in C99 eingeführt)
- Die Funktion entspricht
strtolmit dem Unterschied, das der Anfang des Stringsnptrin einen Wert des Typslong long intumgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wirdLLONG_MAXzurückgegeben, ist er kleiner, wirdLLONG_MINzurückgegeben.
[Bearbeiten] unsigned long int strtoul(const restrict char* nptr, char** restrict endp, int base);
- Die Funktion entspricht
strtolmit dem Unterschied, das der Anfang des Stringsnptrin einen Wert des Typsungsigned long intumgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wirdULONG_MAXzurückgegeben.
[Bearbeiten] unsigned long long int strtoull(const restrict char* nptr, char** restrict endp, int base);
(neu in C99 eingeführt)
- Die Funktion entspricht
strtolmit dem Unterschied, das der Anfang des Stringsnptrin einen Wert des Typsungsigned long long intumgewandelt wird. Wenn der korrekte Wert größer als der darstellbare Wert ist, wirdULLONG_MAXzurü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.
char* strcpy(char* sDest, const char* sSrc)Kopiert einen String sSrc nach sDest inklusive '\0'char* strcat(char* s1, const char* s2)Verbindet zwei Zeichenketten miteinandervoid* strncpy(char* sDest, const char* sSrc, size_t n)Wiestrcpy, kopiert jedoch maximal n Zeichen (ggf. ohne '\0').size_t strlen(const char* s)Liefert die Länge einer Zeichenkette ohne '\0'int strcmp(const char* s1, char* s2)Vergleicht zwei Zeichenketten miteinander. Liefert 0, wenn s1 und s2 gleich sind, <0 wenn s1<s2 und >0 wenn s1>s2int strstr(const char* s, const char* sSub)Sucht die Zeichenkette sSub innerhalb der Zeichenkette s. Liefert einen Zeiger auf das erste Auftreten von sSub in s, oder NULL, falls sSub nicht gefunden wurde.int strchr(const char* s, int c)Sucht das erste Auftreten des Zeichens c in der Zeichenkette s. Liefert einen Zeiger auf das entsprechende Zeichen in s zurück, oder NULL, falls das Zeichen nicht gefunden wurde.void* memcpy(void* sDest, const void* sSrc, size_t n)Kopiert n Bytes von sSrc nach sDest, liefert sDest. Die Speicherblöcke dürfen sich nicht überlappen.void* memmove(void* sDest, const void* sSrc, size_t n)Kopiert n Bytes von sSrc nach sDest, liefert sDest. Die Speicherblöcke dürfen sich überlappen.
[Bearbeiten] time.h
time.h enthält Kalender- und Zeitfunktionen.
time_tArithmetischer 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.