Compartir a través de


Literales de cadena de C++

Un literal de cadena consta de cero o más caracteres del juego de caracteres de origen incluido entre comillas dobles (").Un literal de cadena representa una secuencia de caracteres que, en conjunto, forman una cadena terminada en null.

Los literales de cadena pueden contener cualquier carácter gráfico de juego de caracteres de origen excepto las comillas dobles ("), barra diagonal inversa (\), o carácter de nueva línea.Pueden contener las mismas secuencias de escape descritas en Constantes de caracteres de C++.

Las cadenas de C++ tienen estos tipos:

  • Matriz de char[n], donde es la longitud n de la cadena (en caracteres) más 1 para 'que termina \ 0' que marca el final de la cadena

  • Matriz de wchar_t, para las cadenas de caracteres

El resultado de modificar una constante de cadena es indefinido.Por ejemplo:

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

Específicos de Microsoft

En algunos casos, los literales de cadena idénticos pueden “reunir” para ahorrar espacio en el archivo ejecutable.En la agrupación cadena- literal, el compilador hace que todas las referencias a un literal de cadena determinado al punto en la misma ubicación en memoria, en lugar de que cada punto de referencia a una instancia independiente del literal de cadena.Agrupación de cadenas de/GF .

Específico de Microsoft de FINAL

Al especificar literales de cadena, se concatenan cadenas adyacentes.Por consiguiente, esta declaración:

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

es idéntico a esta declaración:

char szStr[] = "1234";

Esta concatenación de cadenas adyacentes facilita especificar cadenas largas en varias líneas:

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

En el ejemplo anterior, la cadena completa Four score and seven years ago, our forefathers brought forth upon this continent a new nation. se empalma conjuntamente.Esta cadena se puede especificar mediante la línea que empalma como sigue:

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

Cuando todas las cadenas adyacentes en la constante se han concatenado, el carácter de NULL , '\0', se anexan para proporcionar un marcador de la FIN-de- cadena para C cadena- que de funciones.

Cuando la primera cadena contiene un carácter de escape, la concatenación de cadenas puede producir resultados sorprendente.Considere las dos declaraciones siguientes:

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

Aunque es natural suponer que szStr1 y szStr2 contienen los mismos valores, los valores que contienen realmente se muestra en la siguiente ilustración.

Escapes y cadena Concatenation

Concatenación de cadenas y caracteres de escape

Específicos de Microsoft

La longitud máxima de un literal de cadena es 16.384 bytes (16K).Este límite se aplica a las cadenas de char[] escrito y de wchar_t[].Si un literal de cadena consta de las partes entre comillas, el preprocesador concatena las partes en una sola cadena, y para cada línea concatenada, agrega un byte adicional al número total de bytes.

Por ejemplo, supongamos que una cadena consta de 40 líneas con 50 caracteres por línea (2.000 caracteres), y una línea con 7 caracteres, y cada línea es entre comillas.Esto agrega para hasta 2.007 bytes más un byte por carácter null de terminación, para un total de 2.008 bytes.En la concatenación, un carácter adicional se agrega al número total de bytes para cada una de las 40 primeras líneas.Esto crea un total de 2.048 bytes.(Los caracteres adicionales de no se escriben en la cadena final.) Observe, sin embargo, que si las continuaciones de línea (\) se utilizan en lugar de comillas, el preprocesador no agrega un carácter adicional para cada línea.

Específico de Microsoft de FINAL

Determine el tamaño de objetos string contando el número de caracteres y agregando 1 para '\0' que finaliza o 2 para wchar_tescrito.

Dado que las comillas dobles (") agrega las cadenas, utilice la secuencia de escape (\") para representar comillas incluidas.La comilla sencilla (') se puede representar sin una secuencia de escape.La barra diagonal inversa (\) es un carácter de la línea- continuación cuando está colocado en el final de una línea.Si desea que un carácter de barra diagonal inversa para aparecer dentro de una cadena, debe barras diagonales inversas de tipo dos (\\).(Vea fases de traducción en la referencia de preprocesador para obtener más información sobre la continuación de línea.)

Para especificar una cadena de caracteres anchos tipo (wchar_t[]), anteponga la comilla que abre con el caracter L.Por ejemplo:

wchar_t wszStr[] = L"1a1g";

Todos los códigos de escape normales enumerados en Constantes de caracteres son válidos en constantes de cadena.Por ejemplo:

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

Dado que el código de escape termina en el primer carácter que no es un dígito hexadecimal, la especificación de constantes de cadena con códigos de escape hexadecimales incrustados pueden producir resultados inesperados.El ejemplo siguiente se ha diseñado para crear un literal de cadena que contiene 5 ASCII, seguido por los caracteres five:

"\x05five"

El resultado real es un hexadecimal 5F, que es el código ASCII para un subrayado, seguido por los caracteres ive.El ejemplo siguiente genera los resultados deseados:

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

Vea también

Referencia

Literales de C++