21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

19.3 Hilfsfunktionen: <br />

Die Def<strong>in</strong>itionsdatei vere<strong>in</strong>bart Funktionen zur Umwandlung von Zahlen, für Speicherverwaltung<br />

<strong>und</strong> ähnliche Aufgaben.<br />

double atof(const char *s)<br />

atof wandelt den Str<strong>in</strong>g s <strong>in</strong> double um. Beendet <strong>die</strong> Umwandlung beim<br />

ersten unbrauchbaren Zeichen.<br />

<strong>in</strong>t atoi(const char *s)<br />

atoi wandelt den Str<strong>in</strong>g s <strong>in</strong> <strong>in</strong>t um. Beendet <strong>die</strong> Umwandlung beim ersten<br />

unbrauchbaren Zeichen.<br />

long atol(const char *s)<br />

atol wandelt den Str<strong>in</strong>g s <strong>in</strong> long um. Beendet <strong>die</strong> Umwandlung beim ersten<br />

unbrauchbaren Zeichen.<br />

double strtod(const char *s, char **endp)strtod wandelt den Anfang der Zeichenkette s <strong>in</strong> double um, dabei wird<br />

Zwischenraum am Anfang ignoriert. Die Umwandlung wird beim ersten<br />

unbrauchbaren Zeichen beendet. Die Funktion speichert e<strong>in</strong>en Zeiger auf<br />

den ev. nicht umgewandelten Rest der Zeichenkette bei *endp, falls endp<br />

nicht NULL ist. Falls das Ergebnis zu gross ist, (also bei overflow), wird<br />

als Resultat HUGE_VAL mit dem korrekten Vorzeichen geliefert; liegt das<br />

Ergebnis zu dicht bei Null (also bei <strong>und</strong>erflow), wird Null geliefert. In beiden<br />

Fällen erhält errno den Wert ERANGE.<br />

long strtol(const char *s, char **endp, <strong>in</strong>t base)<br />

strtol wandelt den Anfang der Zeichenkette s <strong>in</strong> long um, dabei wird Zwischenraum<br />

am Anfang ignoriert. Die Umwandlung wird beim ersten unbrauchbaren<br />

Zeichen beendet. Die Funktion speichert e<strong>in</strong>en Zeiger auf den<br />

ev. nicht umgewandelten Rest der Zeichenkette bei *endp, falls endp nicht<br />

NULL ist. Hat base e<strong>in</strong>en Wert zwischen 2 <strong>und</strong> 36, erfolgt <strong>die</strong> Umwandlung<br />

unter der Annahme, dass <strong>die</strong> E<strong>in</strong>gabe <strong>in</strong> <strong>die</strong>ser Basis repräsentiert ist.<br />

Hat base den Wert Null, wird als Basis 8, 10 oder 16 verwendet, je nach s;<br />

e<strong>in</strong>e führende Null bedeutet dabei oktal <strong>und</strong> 0x oder 0X zeigen e<strong>in</strong>e hexadezimale<br />

Zahl an. In jedem Fall stehen Buchstaben für <strong>die</strong> Ziffern von 10<br />

bis base-l; bei Basis 16 darf 0x oder 0X am Anfang stehen. Wenn das Resultat<br />

zu gross werden würde, wird je nach Vorzeichen LONG_MAX oder<br />

LONG_MIN geliefert <strong>und</strong> errno erhält den Wert ERANGE.<br />

unsigned long strtoul(const char *s, char **endp, <strong>in</strong>t base)<br />

strtoul funktioniert wie strtol, nur ist der Resultattyp unsigned long <strong>und</strong> der<br />

Fehlerwert ist ULONG_MAX.<br />

<strong>in</strong>t rand(void)<br />

rand liefert e<strong>in</strong>e ganzzahlige Pseudo-Zufallszahl im Bereich von 0 bis<br />

RAND_MAX; <strong>die</strong>ser Wert ist m<strong>in</strong>destens 32767.<br />

void srand(unsigned <strong>in</strong>t seed)<br />

srand benutzt seed als Ausgangswert für e<strong>in</strong>e neue Folge von Pseudo-<br />

Zufallszahlen. Der erste Ausgangswert ist 1. Vor erstmaliger Benutzung<br />

von rand() sollte <strong>in</strong> jedem Programm e<strong>in</strong>mal (Z.B. zu Beg<strong>in</strong>n) srand() aufgerufen<br />

werden, z. B: srand(time(NULL)) (Die aktuelle Zeit reicht meistens<br />

als zufälliger Startwert).<br />

void *calloc(size_t nobj, size_t size) calloc liefert e<strong>in</strong>en Zeiger auf e<strong>in</strong>en Speicherbereich für e<strong>in</strong>en Vektor von<br />

nobj Objekten, jedes mit der Grösse size, oder NULL, wenn <strong>die</strong> Anforderung<br />

nicht erfüllt werden kann. Der Bereich wird mit Null-Bytes <strong>in</strong>itialisiert.<br />

void *malloc(size_t size)<br />

malloc liefert e<strong>in</strong>en Zeiger auf e<strong>in</strong>en Speicherbereich für e<strong>in</strong> Objekt der<br />

Grösse size oder NULL, wenn <strong>die</strong> Anforderung nicht erfüllt werden kann.<br />

Der Bereich ist nicht <strong>in</strong>itialisiert.<br />

void *realloc(void *p, size_t size) realloc ändert <strong>die</strong> Grösse des Objekts, auf das p zeigt, <strong>in</strong> size ab. Bis zur<br />

kle<strong>in</strong>eren der alten <strong>und</strong> neuen Grösse bleibt der Inhalt unverändert. Wird<br />

der Bereich für das Objekt grösser, so ist der zusätzliche Bereich un<strong>in</strong>itialisiert.<br />

realloc liefert e<strong>in</strong>en Zeiger auf den neuen Bereich oder NULL, wenn<br />

<strong>die</strong> Anforderung nicht erfüllt werden kann; <strong>in</strong> <strong>die</strong>sem Fall wird der Inhalt<br />

nicht verändert.<br />

void free(void *p)<br />

free gibt den Bereich frei, auf den p zeigt; <strong>die</strong> Funktion hat ke<strong>in</strong>en Effekt,<br />

wenn p den Wert NULL hat. p muss auf e<strong>in</strong>en Bereich zeigen, der zuvor<br />

mit calloc, malloc oder realloc angelegt wurde.<br />

void abort(void)<br />

abort sorgt für e<strong>in</strong>e anormale, sofortige Beendigung des Programms.<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 70/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!