[Duda] Guardar un string y mostrarlo en Console Application

Iniciado por Hurubnar, 3 Diciembre 2011, 21:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Hurubnar

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):
Código (cpp) [Seleccionar]
#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:
Código (cpp) [Seleccionar]
#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

naderST

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/

Eternal Idol

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 (cpp) [Seleccionar]
#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 ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Hurubnar

Bien, muchas gracias a los dos por las prontas respuestas ;)

Un saludo,
atte. Herio