Udostępnij za pośrednictwem


Literały ciągów znaków języka C++

Literał ciągu znaków składa się zero lub więcej znaków z zestawu znaków źródła ujęte w podwójny cudzysłów (").Literał ciągu znaków reprezentuje sekwencję znaków, że podjęte razem ciąg zakończony zerem formularza.

Literały ciągów znaków może zawierać dowolny znak graficzny z zestawu znaków źródła, z wyjątkiem podwójnego znaku cudzysłowu ("), kreska ułamkowa odwrócona (\), lub znak nowego wiersza.Mogą one zawierać tej samej sekwencji unikowych opisane w Stałe znaków języka C++.

Ciągi C++ mają następujące typy:

  • Tablica charn, gdzie n jest długość ciągu (w znakach) plus 1 kończące '\0**'** , znaki końca ciągu

  • Tablica wchar_t, ciągi znaków wide

Wynik modyfikowanie stała znakowa jest niezdefiniowany.Na przykład:

char *szStr = "1234";
szStr[2] = 'A';      // Results undefined

Programu Microsoft

W niektórych przypadkach literały ciągów znaków identyczny może być "puli" Aby zaoszczędzić miejsce w pliku wykonywalnym.W puli literał ciągu przyczyn kompilatora, wszystkie odniesienia do określony ciąg literału wskaż tej samej lokalizacji w pamięci, zamiast każdego odwołania wskaż osobne wystąpienie literał ciągu znaków./GF umożliwia łączenie ciąg.

KONIEC określonego Microsoft

Określając literały ciągów sklejeniu ciągów sąsiadujących.Dlatego niniejszej deklaracji:

char szStr[] = "12" "34";

jest identyczny do niniejszej deklaracji:

char szStr[] = "1234";

To konkatenacji ciągów sąsiadujących ułatwia określenie długie ciągi w wielu liniach:

cout << "Four score and seven years "
        "ago, our forefathers brought forth "
        "upon this continent a new nation.";

W poprzednim przykładzie cały ciąg Four score and seven years ago, our forefathers brought forth upon this continent a new nation. jest mccoyem.Ciąg ten można również określić za pomocą linii splatanie następująco:

cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";

Po wszystkich sąsiednich ciągi w stałej mają zostały łączone, NULL znak, '\0', jest dołączany do zapewniają funkcje obsługi ciągów c znacznik koniec ciągu.

Gdy pierwszy ciąg zawiera znak anulowania, konkatenacji mogą przynieść wyniki Zaskakujące.Rozważmy dwa następujące deklaracje:

char szStr1[] = "\01" "23";
char szStr2[] = "\0123";

Chociaż to naturalne zakładać, że szStr1 i szStr2 zawierają te same wartości, wartości faktycznie zawierają są pokazane na rysunku.

Wyprowadza i łączenia ciągów

Wyprowadza i połączenie ciągów

Programu Microsoft

Maksymalna długość literał ciągu znaków wynosi 16 384 bajtów (16 K).Limit ten dotyczy ciągów typu char [ i [wchar_t].Jeśli literał ciągu znaków składa się z części ujęte w podwójny cudzysłów, preprocesora łączy części w jeden ciąg znaków i dla każdego wiersza łączone dodaje dodatkowy bajt do całkowitej liczby bajtów.

Załóżmy na przykład, ciąg składa się z 40 wiersze z 50 znaków na wiersz (2 000 znaków) i jeden wiersz z 7 znaków, a każdy wiersz jest otoczony przez podwójny cudzysłów.Spowoduje to dodanie do 2,007 bajtów oraz jeden bajt kończącego znaku null dla całkowitej liczby bajtów 2,008.Na złączenie nadmiarowy znak jest dodawana do całkowitej liczby bajtów dla każdego z pierwszych 40 wierszy.Dzięki temu ogółem 2048 bajtów.(Dodatkowe znaki nie są zapisywane na ciąg końcowy). Zauważ, że jeśli kontynuacji wiersza (\) są używane zamiast znaków cudzysłowu podwójnego preprocesora nie dodaje nadmiarowy znak dla każdego wiersza.

KONIEC określonego Microsoft

Określić rozmiar obiektów ciąg liczenie znaków i dodając 1 kończące '\0' lub 2 dla typu wchar_t.

Ponieważ podwójny cudzysłów (") ujmuje ciągów, użyć sekwencji unikowej (\") do reprezentowania ujęte w podwójny cudzysłów.Pojedynczy cudzysłów (') mogą być reprezentowane bez sekwencji unikowej.Znak odwróconej kreski ułamkowej (\) jest znakiem kontynuacji wiersza umieszczane na końcu wiersza.Jeśli ma się pojawić w ciągu znak odwróconej kreski ułamkowej, należy wpisać dwóch kresek ułamkowych odwróconych (\\).(Zobacz Etapów translacji w Odniesienia preprocesora uzyskać więcej informacji o kontynuacji wiersza.)

Aby określić ciąg typu szerokich znaków ([wchar_t]), należy poprzedzić znak cudzysłowu podwójnego otwarcia znakiem l.Na przykład:

wchar_t wszStr[] = L"1a1g";

Wszystkie kody ucieczki normalnej wymienionych w Znak stałe są ważne w ciągu stałych.Na przykład:

cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";

Specyfikacja stałych ciąg osadzony escape szesnastkowe kody może spowodować nieoczekiwane wyniki, ponieważ kod wyjścia kończy się od pierwszego znaku, który nie jest cyfrą szesnastkową.Poniższy przykład zamierza utworzyć ciąg literału, zawierające 5 ASCII, następuje znaki five:

"\x05five"

Rzeczywisty wynik jest 5F szesnastkowy, który jest kod znaku podkreślenia, następuje znaki ASCII ive.Poniższy przykład tworzy pożądanych wyników:

"\005five"     // Use octal constant.
"\x05" "five"  // Use string splicing.

Zobacz też

Informacje

Literały C++