2009-06-03 2 views
4

Wie sagt man so etwas?Eine große Zeichenfolge trennen

static const string message = "This is a message.\n 
           It continues in the next line" 

Das Problem ist, wird die nächste Zeile als Teil der Zeichenfolge nicht werden ..

Wie zu beheben, dass erkannt? Oder ist die einzige Lösung, um ein Array von Strings zu erstellen und dann das Array zu initialisieren, um jede Zeile zu halten?

Antwort

16

Enclose jede Zeile in einem eigenen Satz von Anführungszeichen:

static const string message = "This is a message.\n" 
           "It continues in the next line"; 

Der Compiler sie zu einem einzigen String kombinieren.

+1

Genauer gesagt, der Präprozessor wird. – ephemient

+2

@ephemient: Eigentlich ist der Präprozessor nicht die Ebene, die das tut. Sie können dies selbst testen, indem Sie eine kleine App erstellen und mit "gcc -E test.c" kompilieren. Dadurch wird das Ergebnis des Präprozessors ausgegeben. Sie werden feststellen, dass die Strings immer noch getrennt sind. Es ist der Compiler selbst, der die Verkettung der benachbarten String-Konstanten * nicht * des Präprozessors ausführt. –

+4

@ephemient: tatsächlich hat der C99-Standard eine Anmerkung in dem Abschnitt bezüglich des Präprozessors: "148) Beachten Sie, dass benachbarte String-Literale nicht zu einem einzigen String-Literal verkettet werden (siehe die Übersetzungsphasen in 5.1.1.2); Eine Erweiterung, die zu zwei Zeichenfolgenliteralen führt, ist eine ungültige Anweisung. " –

9

Sie können einen Schrägstrich verwenden oder jede Zeile zitieren, so

"This is a message.\n \ 
It continues in the next line" 

oder

"This is a message." 
"It continues in the next line" 
+0

Ich benutzte immer die erste Form, hatte aber Probleme mit eingefügtem Leerraum durch Einrückung ... dh wenn diese Anweisung einzeln mit 4 Leerzeichen eingerückt wurde, gab es vier zusätzliche Leerzeichen in der Mitte des Strings. Jetzt benutze ich ausschließlich die zweite Form. –

1

In C++ wie in C, string litterals durch Leerzeichen getrennt werden implizit verknüpft, so

"foo" "bar" 

entspricht:

So
"foobar" 

Sie wollen:

static const string message = "This is a message.\n" 
           "It continues in the next line";