Literais de seqüência de caracteres de C++
Uma cadeia de caracteres literal consiste de zero ou mais caracteres do conjunto de caracteres de origem circundado por aspas duplas (").Um literal de cadeia de caracteres representa uma seqüência de caracteres que, tomados juntos, formam uma cadeia de caracteres NULL- finalizada.
Literais de cadeia de caracteres pode conter qualquer caractere gráfico do conjunto de caracteres de origem exceto as aspas duplas ("), a barra invertida (\), ou caractere de nova linha.Podem conter as mesmas seqüências de escape descritas em Constantes de caractere do C++.
As cadeias de caracteres C++ têm esses tipos:
Matriz de charem[], onde n é o comprimento da cadeia de caracteres em caracteres () 1 para mais 'de terminação \ 0' que marca o final da cadeia de caracteres
Matriz de wchar_t, para cadeias de caracteres de largo- caractere
O resultado de alterar uma constante de cadeia de caracteres é indefinido.Por exemplo:
char *szStr = "1234";
szStr[2] = 'A'; // Results undefined
Específico da Microsoft
Em alguns casos, os literais de cadeia de caracteres “idênticos podem ser agrupados” para economizar espaço no arquivo executável.Em o pool cadeia de caracteres literal, o compilador faz com que todas as referências a um literal de cadeia de caracteres específica ao ponto no mesmo local na memória, em vez de ter cada ponto de referência a uma instância separada de cadeia de caracteres literal./GF permite que o pool de cadeia de caracteres.
Específico da Microsoft de END
A o especificar literais de cadeia de caracteres, cadeias de caracteres adjacentes são concatenados.Portanto, essa declaração de:
char szStr[] = "12" "34";
é idêntico a essa declaração:
char szStr[] = "1234";
Esta concatenação de cadeias de caracteres adjacentes facilita especificar cadeias de caracteres longas através de várias linhas:
cout << "Four score and seven years "
"ago, our forefathers brought forth "
"upon this continent a new nation.";
Em o exemplo anterior, a cadeia de caracteres inteira Four score and seven years ago, our forefathers brought forth upon this continent a new nation. é emendada juntos.Essa cadeia de caracteres também pode ser especificada usando a linha que totalmente como segue:
cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";
As cadeias de caracteres adjacentes em uma constante que foram concatenados, o caractere de NULO , '\0', são acrescentadas para fornecer um marcador final da cadeia de caracteres para funções de cadeia de caracteres manipulação de C.
Quando a primeira cadeia de caracteres contém um caractere de escape, a concatenação de cadeia de caracteres pode produzir resultados surpreendentes.Considere as duas declarações:
char szStr1[] = "\01" "23";
char szStr2[] = "\0123";
Embora seja natural suponha que szStr1 e szStr2 contêm os mesmos valores, os valores que contêm realmente são mostrados na figura a seguir.
Vazamentos e concatenação de cadeia de caracteres
Específico da Microsoft
O comprimento máximo de uma cadeia de caracteres literal é 16.384 bytes (16K).Esse limite se aplica às cadeias de caracteres de tipo char[] e wchar_t[].Se uma cadeia de caracteres literal consiste nas partes envolvidas em aspas duplas - as marcas, o pré-processador concatenam partes em uma única cadeia de caracteres, e cada linha concatenada, adiciona um byte adicional para o número de bytes total.
Por exemplo, suponha que uma cadeia de caracteres consiste em linhas 40 com 50 caracteres por linha (2.000 caracteres), e em uma linha com 7 caracteres, e cada linha é cercada por aspas duplas.Isso adiciona a anterior 2.007 bytes mais um byte para o caractere de terminação zero, para um total de 2.008 bytes.Em a concatenação, um caractere adicional é adicionado ao número de bytes total para cada uma das primeiras linhas 40.Isso torna um total de 2.048 bytes.(Os caracteres adicionais não são gravados para a cadeia de caracteres final.) Observe, entretanto, que se a linha continuações (\) é usado em vez de aspas duplas, o pré-processador não adiciona um caractere adicional para cada linha.
Específico da Microsoft de END
Determine o tamanho de objetos de cadeia de caracteres contar o número de caracteres e adicionando 1 para '\0' de terminação ou 2 para o tipo wchar_t.
Porque as aspas duplas (") incluem cadeias de caracteres, use a seqüência de escape (\") para representar aspas duplas englobada - marcas.As aspas simples ()'podem ser representadas sem uma seqüência de escape.O caractere de barra invertida (\) é um caractere de continuação de linha quando colocado no final de uma linha.Se você quiser um caractere de barra invertida para aparecer dentro de uma cadeia de caracteres, você deve incluir muitas do tipo dois\\().(Consulte Fases de conversãona referência pré-processamento para obter mais informações sobre a continuação de linha.)
Para especificar uma cadeia de caracteres de tipo largo- caractere (wchar_t[]), coloque aspas duplas de abertura com o caractere L.Por exemplo:
wchar_t wszStr[] = L"1a1g";
Todos os códigos de escape normais listados em constantes de caractere são válidos em constantes de cadeia de caracteres.Por exemplo:
cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";
Porque o código de escape é encerrado no primeiro caractere que não é um dígito hexadecimal, a especificação de constantes de cadeia de caracteres por códigos de escape hexadecimais inseridos pode causar resultados inesperados.O exemplo destina criar um literal de cadeia de caracteres que contém ASCII 5, seguido de caracteres five:
"\x05five"
O resultado real é um 5F hexadecimal, que é o código ASCII para um sublinhado, seguido por caracteres ive.O exemplo a seguir produz resultados desejados:
"\005five" // Use octal constant.
"\x05" "five" // Use string splicing.