Hola
Hace un tiempo leí Effective C++, donde se aconseja el uso de fgets() (y strncat) en vez de get() porque se puede especificar el número de caracteres a leer y así no se produce un desbordamiento de memoria.
Varios libros nuevos, como el de Prata o Professional C++ no hablan de fgets.
¿Se debe a que ya no hace falta?
Lo digo porque comandos como cin.get() y cin.getline() pueden especificar el tamaño a leer.
¿Qué diferencia hay entre cin.get() y fgets()?
En C++ ya no hace falta, menos cuando existe la clase string, cuyo tamaño puede modificarse sobre la marcha:
string Texto;
getline(cin,Texto); // Puedes leer infinitos caracteres
Cita de: amchacon en 14 Agosto 2013, 01:50 AM
En C++ ya no hace falta, menos cuando existe la clase string, cuyo tamaño puede modificarse sobre la marcha:
string Texto;
getline(cin,Texto); // Puedes leer infinitos caracteres
¿Y qué pasa si cin no cabe en memoria?
string es una clase que se ajusta solo, de modo que si metes 100 caracteres se reservaran 100 caracteres.
Dado que cada caracter ocupa 1 byte, es muy díficil que tengas problemas de memoria (cuantos caracteres vas a meter? 1000000000?). Pero si así fuera lanzaría una excepcion (bad_alloc) que podrías manejar con un try y catch (o no la manejas, y entonces el programa finalizaría mostrando un mensaje de error).
OK, gracias. Lo que no entiendo es porque algunas cosas devuelven punteros (como los nombres de los array) y otras no (como los string)
Cita de: skan en 14 Agosto 2013, 14:21 PM
OK, gracias. Lo que no entiendo es porque algunas cosas devuelven punteros (como los nombres de los array) y otras no (como los string)
Por que string es una clase built-in de la STL, que internamente también maneja un array de caracteres. Puedes acceder a ese array por medio de la función c_str() de la clase string.
Saludos.