leer - libreria para acentos en c++
¿Por qué cambia el tamaño de este std:: string, cuando se cambian los caracteres? (2)
Tengo un problema en el que el tamaño de la cadena se efectúa con la presencia de un carácter ''/0''
. Busqué por todas partes en SO y no pude obtener la respuesta todavía.
Aquí está el fragmento.
int main()
{
std::string a = "123123/0shai/0";
std::cout << a.length();
}
La salida en este caso es
6
Donde como el mismo programa con una cadena diferente que tiene números en lugar de caracteres
int main()
{
std::string a = "123123/0123/0";
std::cout << a.length();
}
da una salida de
8
¿Qué está sucediendo exactamente bajo el capó? ¿Cómo cambia el comportamiento la presencia de un carácter ''/0''
?
La secuencia /012
cuando se usa en un literal de cadena (o carácter) es una secuencia de escape octal . Es el número octal 12
que corresponde al ASCII salto de línea ASCII ( ''/n''
).
Eso significa que su segunda cadena es en realidad igual a "123123/n3/0"
(más el terminador literal de la cadena real).
Hubiera sido muy claro si intentara imprimir el contenido de la cadena.
Las secuencias octales tienen una longitud de uno a tres dígitos, y el compilador utilizará tantos dígitos como sea posible.
Si http://ideone.com/mtfS50 la coloración en http://ideone.com/mtfS50 , verá que /012
tiene un color diferente. Eso es porque este es un solo carácter escrito en octal.