He visto 2 formas para declarar cadenas de caracteres.
Las cadenas de caracteres no se declaran, las cadenas de caracteres son. En concreto, en c++ las cadenas de caracteres pertenecen a la categoría de literal.
Una vez aclarado ese punto, cabe destacar que en C++ los literales de cadena de texto tienen un tratamiento especial1. El tipo de datos de estos literales es tipo_de_caracter[tamaño]
, por lo tanto:
- El tipo de
"Hola"
es char[5]
.
- El tipo de
L"Mundo"
es wchar_t[6]
.
Fíjate que el tamaño es la cantidad de letras de la palabra mas uno, esto es porque en el literal de cadena se almacena también el carácter nulo ('\0'
en el caso de char
o L'\0'
en el caso de wchar_t
). Otra característica de los literales de texto es que no son modificables y que su espacio de memoria se reserva en tiempo de compilación.
Ahora veamos tus ejemplos:
1
string nombre;
cout<<"Introduce tu nombre: ";
cin>>nombre;
2
char nombre[25];
cout<<"Introduce tu nombre: ";
cin.get(nombre, 25, '\n');
En el primer caso no estás usando una cadena de caracteres, usas un objeto std::string
cuyo cometido es gestionar caracteres con un búfer interno y que se adapta dinámicamente a las necesidades ampliando o reduciendo el búfer o realojando memoria. En el segundo caso tampoco estás usando una cadena de caracteres si no una formación2 de venti-cinco caracteres, esta formación es de tamaño fijo y no puede alojar más datos ni reajustarse dinámicamente.
1De hecho, los literales de cadena de texto (por su complejidad) son tratados de manera especial en todos los lenguajes de programación que conozco.
2También conocida como arreglo o en inglés array.