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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<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 />

E<strong>in</strong> grösseres Beispiel für <strong>die</strong> Benutzung von dynamischem Speicher:<br />

#<strong>in</strong>clude <br />

#<strong>in</strong>clude <br />

char *TextE<strong>in</strong>lesen(void)<br />

{<br />

char *Text;<br />

char Zeichen;<br />

<strong>in</strong>t Length = 0;<br />

<strong>in</strong>t MaxLength = 100;<br />

}<br />

/* Platz fuer 100 Zeichen reservieren */<br />

/*( + 1 Reserve fuer abschliessende '\0') */<br />

Text = malloc(sizeof(char) * (MaxLength + 1));<br />

if (Text == NULL) {<br />

pr<strong>in</strong>tf("Error, out of memory");<br />

return NULL;<br />

} else {<br />

pr<strong>in</strong>tf("Bitte Text e<strong>in</strong>geben, abschluss mit \n");<br />

Zeichen = getchar();<br />

/* Solange bis gedrueckt wird */<br />

while (Zeichen != '*') {<br />

/* Block erweitern, wenn zu kle<strong>in</strong> */<br />

if (Length >= MaxLength) {<br />

char *T = realloc(Text, MaxLength+100);<br />

if (T == NULL) {<br />

free(Text); /* Fehlgeschlagen, alten Block freigeben */<br />

pr<strong>in</strong>tf("Error, out of memory");<br />

return NULL;<br />

}<br />

}<br />

/* wurde erweitert, neuen Block benutzen */<br />

Text = T;<br />

MaxLength += 100;<br />

/* Zeichen abspeichern */<br />

Text[Length++] = Zeichen;<br />

/* <strong>und</strong> neues Zeichen e<strong>in</strong>lesen */<br />

Zeichen = getchar();<br />

}<br />

Text[Length++] = '\0'; /* Buffer mit '\0' abschliessen */<br />

}<br />

return Text;<br />

<strong>in</strong>t ma<strong>in</strong>(<strong>in</strong>t argc, char*argv[])<br />

{<br />

char *TextBlock;<br />

}<br />

/* Textblock beliebiger groesse e<strong>in</strong>lesen */<br />

TextBlock = TextE<strong>in</strong>lesen();<br />

if (TextBlock != NULL) {<br />

/* ...wieder ausgeben */<br />

puts("Sie haben folgenden Text e<strong>in</strong>gegeben:\n\n");<br />

puts(TextBlock);<br />

/* <strong>und</strong> Speicherblock wieder freigeben */<br />

free(TextBlock);<br />

}<br />

return 0;<br />

Liest e<strong>in</strong>e beliebige Anzahl Zeichen<br />

e<strong>in</strong>, bis * e<strong>in</strong>gegeben wird <strong>und</strong> gibt<br />

den Text anschliessend wieder aus.<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!