Buenas:
Tengo los siguientes dos códigos para guardar una frase con espacios y mostrarlo seguidamente en un proyecto en modo consola.
Este primer código es del 2005 (fuente (http://www.forosdelweb.com/f14/leer-cadena-caracteres-por-teclado-c-279157/)):
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string s;
cin.getline((char*)s.c_str(), 256);
cout << s.c_str();
system("PAUSE");
return 0;
}
Este es el segundo código, más sencillo y que cumple la misma función:
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
char s[20];
gets(s);
cout << s;
system("PAUSE");
return 0;
}
El segundo código lo entiende, pues es muy simple, pero ¿alguien me podría explicar el primero? Sé que es más complicado porque es viejo (año 2005) pero aun así me gustaría saber el porqué de ese 256 etcétera.
Un saludo,
atte. Herio
Lo que hace el primer código es que obtiene del flujo de entrada una linea y almacena máximo 256 caracteres en la cadena que le pasaste como primer parámetro. Aquí tienes un link con mas información:
http://www.cplusplus.com/reference/iostream/istream/getline/ (http://www.cplusplus.com/reference/iostream/istream/getline/)
http://www.cplusplus.com/reference/iostream/istream/getline/
El 256 se supone que es el tamaño maximo de caracteres a escribir en la cadena.
Igual olvidate de ese codigo, seguramente lo hice bajo VC++ 6.0:
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string s;
getline(cin, s);
cout << s;
return 0;
}
El segundo codigo tambien es inseguro, gets no recibe el tamaño de la cadena asi que es muy facil producir un buffer overflow ...
Bien, muchas gracias a los dos por las prontas respuestas ;)
Un saludo,
atte. Herio