Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Hurubnar en 3 Diciembre 2011, 21:06 pm



Título: [Duda] Guardar un string y mostrarlo en Console Application
Publicado por: Hurubnar en 3 Diciembre 2011, 21:06 pm
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/)):
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main (void)
  7. {
  8.  string s;
  9.  cin.getline((char*)s.c_str(), 256);
  10.  cout << s.c_str();
  11.  system("PAUSE");
  12.  return 0;
  13. }

Este es el segundo código, más sencillo y que cumple la misma función:
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main (void)
  7. {
  8.  char s[20];
  9.  gets(s);
  10.  
  11.  cout << s;
  12.  
  13.  system("PAUSE");
  14.  return 0;
  15. }

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


Título: Re: [Duda] Guardar un string y mostrarlo en Console Application
Publicado por: naderST en 3 Diciembre 2011, 21:17 pm
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/)


Título: Re: [Duda] Guardar un string y mostrarlo en Console Application
Publicado por: Eternal Idol en 3 Diciembre 2011, 21:27 pm
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:

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main (void)
  6. {
  7.  string s;
  8.  getline(cin, s);
  9.  cout << s;
  10.  return 0;
  11. }

El segundo codigo tambien es inseguro, gets no recibe el tamaño de la cadena asi que es muy facil producir un buffer overflow ...


Título: Re: [Duda] Guardar un string y mostrarlo en Console Application
Publicado por: Hurubnar en 3 Diciembre 2011, 22:31 pm
Bien, muchas gracias a los dos por las prontas respuestas ;)

Un saludo,
atte. Herio