Читать книгу C für Dummies - Dan Gookin - Страница 81

Noch mehr lustige Texte

Оглавление

Meine Damen und Herren, ich präsentiere Ihnen den folgenden String:

"Ta da! Ich bin ein String."

Eine einfache Ansammlung von Buchstaben, Zeichen und Symbolen, umgeben von Anführungszeichen. Packen wir das in runde Klammern ein, damit der String nicht friert, schreiben wir links ein printf hin und rechts ein Semikolon:

printf("Ta da! Ich bin ein String.");

Und fertig ist die C-Anweisung, um den genannten String auf dem Bildschirm darzustellen.

Aber betrachten Sie nun diesen String:

"Er sagte: "Ta da! Ich bin ein String.""

Ist das verboten oder was? Es ist immer noch ein String, aber nun mit mehrfachen Anführungszeichen. Acht Striche schwirren um den String. Wie wird er damit fertig?

Der C-Compiler bestraft Sie nicht dafür, wenn Sie etwas ausprobieren. Fehler sind eine sichere Sache, also lasst uns ein wenig experimentieren.

Erzeugen Sie das folgende Programm Dblquote.c, das im Wesentlichen wieder nur ein »printf schreibt was«-Programm ist. Das ist bereits das ganze Experiment.

#include <stdio.h> int main() { printf("Er sagte: "Ta da! Ich bin ein String.""); return 0; }

Listing 3.2: Name: Dblquote.c

Tippen Sie den Programmcode genauso ab, wie er da steht. Achten Sie vor allem auf die Anführungszeichen. Speichern Sie die Datei ab und starten Sie das Programm.

Wenn Sie können! Die Chancen sind hoch – beziehungsweise absolut sicher –, dass Sie einen der folgenden Fehler erhalten, wenn Sie kompilieren wollen:

fehlende ')' vor Bezeichner 'Ta'

oder

Funktionsaufruf ohne )

oder

Syntaxfehler vor "Ta"

oder

expected ')' before 'Ta'

Der genaue Wortlaut unterscheidet sich von Compiler zu Compiler, aber die Fehlermeldung wird sinngemäß erscheinen.

Das Problem ist, dass printf einen in Anführungszeichen eingeschlossenen Text benötigt. Der Compiler weiß das. Nach dem zweiten Anführungszeichen, vor dem Wort Ta, erwartet der Compiler etwas anderes, höchstwahrscheinlich die zweite Klammer ) oder eine andere gültige C-Anweisung. Aber davon ist hier nichts zu sehen, also erzeugt er den Fehler. Glück gehabt.

Offensichtlich gibt es keinen Grund, warum doppelte Anführungszeichen in einem String auftauchen können, sodass der Compiler ins Stolpern gerät. Die Lösung besteht in der Verwendung einer Escape-Sequenz.

Ein String darf keine doppelten Anführungszeichen oder einige der anderen im nächsten Abschnitt aufgelisteten Zeichen enthalten. Er muss mit einem Anführungszeichen beginnen und mit einem Anführungszeichen enden. Aber mittendrin? Keine Chance.

Um solche besonderen Zeichen auszugeben, müssen Sie Escape-Sequenzen verwenden; dies ist ein spezieller Weg, um andersartige Zeichen in einem String unterzubringen, ohne das printf zu stören.

Wenn Sie mit einer integrierten Entwicklungsumgebung arbeiten, haben Sie den Fehler eventuell bereits bei der Eingabe bemerken können, weil die Textfärbung des Strings nicht mehr korrekt war. Dies ist einer der Vorteile einer integrierten Entwicklungsumgebung. Unser Code::Blocks tut das leider erst nach dem Aufruf des Compilers, noch nicht während der Eingabe.

In den alten Tagen wäre ein Programmierer auch ohne diese Zeichen ausgekommen. Statt den mehrfachen doppelten Anführungszeichen hätte er einfach zwei Apostrophe verwendet. Einige altehrwürdige Programmierer, die sich mit Escape-Sequenzen nicht auskennen, nutzen solche Tricks immer noch.

C für Dummies

Подняться наверх