Autor
|
Tema: Seguimos necesitando fgets por seguridad? (Leído 2,599 veces)
|
skan
Desconectado
Mensajes: 1.360
|
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 línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
En línea
|
|
|
|
skan
Desconectado
Mensajes: 1.360
|
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?
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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).
|
|
« Última modificación: 14 Agosto 2013, 08:54 am por amchacon »
|
En línea
|
|
|
|
skan
Desconectado
Mensajes: 1.360
|
OK, gracias. Lo que no entiendo es porque algunas cosas devuelven punteros (como los nombres de los array) y otras no (como los string)
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Seguimos con el problema de la grabadora
Software
|
zabatu
|
1
|
2,412
|
8 Enero 2006, 20:15 pm
por el-brujo
|
|
|
Seguimos cOn problemas???
Sugerencias y dudas sobre el Foro
|
mousehack
|
5
|
2,987
|
22 Mayo 2006, 13:22 pm
por -BeTa-
|
|
|
Aun seguimos en navidad ¿?
« 1 2 »
Sugerencias y dudas sobre el Foro
|
Hadess_inf
|
13
|
5,551
|
2 Febrero 2008, 17:27 pm
por Carloswaldo
|
|
|
Windows 10 ha mejorado en seguridad pero sigue necesitando antivirus
Noticias
|
wolfbcn
|
1
|
1,339
|
9 Diciembre 2015, 22:01 pm
por Orubatosu
|
|
|
Nuevo y necesitando ayuda.
Hacking
|
isaacdvid
|
3
|
2,854
|
16 Febrero 2017, 00:40 am
por RaloGomez
|
|