Standard Library
stdio.h
perror
void perror(char *s) druckt den letzten Fehler mit der angegebenen Nachricht aus.
printf/sprintf (man 3 printf)
printf(char *format, args...) formatiert die args anhand von dem format. Es gibt 3 relevante Methoden:
printf(char *format, args...)druckt den formatierten String in die Konsolesprintf(charr *str, char *format, args...)schreibt den formatierten String in die Variablestr.fprintf(FILE *stream, char *format, args...)schreibt den formatierten String in das Filestream
Jeder Platzhalter folgt dem Muster %[flags][width][.precision]conversion
Die width gibt an, wie viel Platz vor der Variable soll sein. Wenn die Zahl mit einem 0 prefixt ist (z.B. 022), wird die Zahl 0-padded. Dies wird allerdings nur von Zahlen, wie Integers oder Doubles unterstützt.
Die .precision gibt an, wie viele Stellen nach dem Komma gedruckt werden sollen und wird nur für Kommazahlen unterstützt.
Anstatt eine Zahl für width und .precision kann auch ein * verwendet werden. Dabei wird der Wert als Input genommen. Beispiel: printf("%0*.*f", 7, 2, 2.456666) würde 0002.46 ausgeben.
Das flag kann - sein, was bewirkt, dass das Feld left-adjusted wird.
Folgende Conversions sind gängig:
| Typ | C | Erklärung | Beispiel |
|---|---|---|---|
| int | d, i | gibt ein int aus. Precission ist nicht unterstützt | %02i (druckt 03) |
| unsinged int | u, x/X | u gibt die Zahl in dezimal aus, x in Hex als kleine Buchstaben (ff) und X mit grossen Buchstaben (FF) | %04u (druckt 0022), %X (druckt AF2) |
| double | f | gibt double aus | %.3f = "2.340" |
| char | c | gibt ein char aus. Precission und 0-padding sind nicht unterstützt | %2c= " d" |
| char* | s | gibt ein string aus | %s = "Hello world" |
scanf
scanf(char *format, ...) liest ein Format vom stdin. Es gibt auch fscanf(FILE *stream, char *format, ...), was von einem File scannt und sscanf(char *str, char *format, ...), was von einem String scannet.
Als Rückgabe Wert wird die Anzahl von gefunden Inputs zurück gegeben.
Das Format ist wie bei printf mit einigen Änderungen.
fist nur für floatslfmuss für doubles genutzt werden
scanf("hello %d", i) wäre nicht valide, da keine fixe Strings im scanf-Format stehen darf
int getchar()
Blockiert, bis der Nutzer eine Zeile in die Konsole eingegeben hat. Danach wird jeweils ein Zeichen von diesem Buffer gelesen und zurück gegeben. Wenn stdin geschlossen wird, wird EOF zurück gegeben.
String-Library
-
int strlen(char *str)Die Länge des Strings (ohne\0) -
int strcmp(char *s1, char *s2) -
char* strcpy(char *dest, char *src)Achtung: dest muss genug gross für src sein -
car *strcat(char *s1, char *s2)Achtung: s1 muss genug gross, für s1 + s2 sein -
char *strdup(char *s)Dupliziertsin einer neuenchar*, welcher mitfree(...)freigegeben werden muss -
char* strsep(char **stringp, char* dellim)Findet den ersten Token und gibt ein Pointer auf diesem Zurück. In*stringpwird der delim mit\0überschrieben und**stringpwird geupdated, dass es auf den delim zeigt.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *s1 = strdup("1, 2, 3, hi");
char *token;
while ((token = strsep(&src, ",")) != NULL) {
printf("token: %s\n", token);
}
free(s1);
}
char *strtok(char *s, char *delim)Es wird nachdeliminsgesucht. Wenn gefunden, wirddelimdurch\0ersetzt und es wird ein Pointer auf den gefundenen Token zurück gegeben. Es wird ein interner statischer Buffer verwendet. Daher wird bei folge AufrufeNULLalssverwendet.