Título: Seguimos necesitando fgets por seguridad? Publicado por: skan en 14 Agosto 2013, 01:33 am 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()? Título: Re: Seguimos necesitando fgets por seguridad? Publicado por: 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:
Código
Título: Re: Seguimos necesitando fgets por seguridad? Publicado por: skan en 14 Agosto 2013, 02:57 am En C++ ya no hace falta, menos cuando existe la clase string, cuyo tamaño puede modificarse sobre la marcha: Código
¿Y qué pasa si cin no cabe en memoria? Título: Re: Seguimos necesitando fgets por seguridad? Publicado por: amchacon en 14 Agosto 2013, 08:48 am 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). Título: Re: Seguimos necesitando fgets por seguridad? Publicado por: 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)
Título: Re: Seguimos necesitando fgets por seguridad? Publicado por: 0xDani en 14 Agosto 2013, 18:05 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. |