String-Konstanten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Konstanten (Übersicht) - Index

String-Literale

String-Konstanten (oder String-Literale) sind eine spezielle Konstantenkategorie für feste Zeichenfolgen. Eine String-Konstante hat den Datentyp array-of-const char und die Speicherklasse static. Derartige Konstanten setzen sich aus einer Reihe beliebig vieler Zeichen in Anführungszeichen zusammen:

"This is literally a string!"

Der Null-String (leerer String) wird durch "" gekennzeichnet.

Die Zeichen, die innerhalb der Anführungszeichen stehen, können auch Escape-Sequenzen enthalten. Der Quelltext

"\t\t\"Name\"\\\tAddress\n\n"

gibt Folgendes aus:

               "Name"\        Address


Vor "Name" stehen zwei Tabulatoren, vor Address ein Tabulator. Danach folgen zwei neue Zeilen. \" sorgt für die Ausgabe der Anführungszeichen im String.

Die Escape-Zeichensequenz "\\" wird von dem Compiler in "\" übersetzt, wenn Sie mit der Option -A für ANSI compilieren.

String-Konstanten werden intern als die gegebene Zeichensequenz plus einem abschließenden Null-Zeichen ('\0') abgespeichert. Ein leerer String wird als ein '\0'-Zeichen abgelegt.

Vier String-Literaltypen in C++0x

String-Literale sind per Vorgabe ANSI-Strings mit char-Zeichen. Mit den Präfixen L, u und U können Sie festlegen, dass String-Literale Wide-Zeichen oder Unicode-Zeichen (Unicode-Zeichentypen und Literale (C++11)) enthalten sollen:

  • Ein String-Literal, dem ein L unmittelbar vorangeht, ist ein Wide-Zeichen-String mit Zeichen des Datentyps wchar_t. Falls wchar_t in einem C-Programm verwendet wird, stellt es einen in der Header-Datei stddef.h definierten Typ dar. In C++-Programmen ist wchar_t ein Schlüsselwort. Die Speicherzuweisung für wchar_t-Strings liegt bei zwei Byte pro Zeichen. Der Wert eines einzelnen Wide-Zeichens ist die Codierung dieses Zeichens im Wide-Zeichensatz der Ausführung.
  • In C++0x-Programmen ist ein String-Literal, dem ein L unmittelbar vorangeht, ein Unicode-Zeichen-String mit Zeichen des Datentyps char16_t. In C++0x-Programmen ist char16_t ein Schlüsselwort, das einen 16-Bit-Zeichentyp deklariert. char16_t definiert die UTF-16-Zeichencodierung für Unicode. Die Speicherzuweisung für char16_t-Zeichen liegt bei zwei oder vier Byte pro Zeichen.
  • In C++0x-Programmen ist ein String-Literal, dem ein U unmittelbar vorangeht, ein Unicode-Zeichen-String mit Zeichen des Datentyps char32_t. In C++0x-Programmen ist char32_t ein Schlüsselwort, das einen 32-Bit-Zeichentyp deklariert. char32_t definiert die UTF-32-Zeichencodierung für Unicode. Die Speicherzuweisung für char32_t-Strings liegt bei vier Byte pro Zeichen.


Das heißt, in C++0x-Programmen können Sie die folgenden vier Typen für String-Literale verwenden:

  • "ANSI string" - ein ANSI-String-Literal mit char-Zeichen
  • L"Wide-character string" - String-Literal mit wchar_t-Zeichen
  • u"UTF-16 string" - String-Literal mit char16_t-Unicode-Zeichen in der UTF-16-Codierung
  • U"UTF-32 string" - String-Literal mit char32_t-Unicode-Zeichen in der UTF-32-Codierung

Verketten von String-Literalen

Durch Verwendung des Backslash (\) können Sie eine String-Konstante auf zwei Zeilen aufteilen:

puts("This is really \
a one-line string");

String-Konstanten, die nur durch Whitespace getrennt sind, werden während der Analyse verkettet. Das Beispiel

#include <stdio.h>
int main() {
   char    *p;
   p = "This is an example of how the compiler "
     " will \nconcatenate very long strings for you"
     " automatically, \nresulting in nicer" " looking programs.";
   printf(p);
   return(0);
}

liefert folgenden Ausdruck:

This is an example of how the compiler will
concatenate very long strings for you automatically,
resulting in nicer looking programs.


Siehe auch