tildes para libreria leer lc_all especiales caracteres biblioteca agregar acentos c++ string escaping

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(); }

http://ideone.com/W6Bhfl

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(); }

http://ideone.com/mtfS50

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.