[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: fgets() lenguaje c



On Fri, 3 Sep 2004 19:24:55 -0300, Felix Cuello <felix@qodiga.com> wrote:
> On Sat, Sep 04, 2004 at 12:06:57AM +0200, Haplo wrote:
> > > Lo que quiero hacer es leer esa palabra y guardarla en una variable, para
> > > ya despues manipularla como cualquier string,
> Che, no se compliquen tanto. La forma más sencilla de leer un archivo leyendo
> de a strings por vez [al menos me parece] es la siguiente:
> 
> [...]
> char mibuf[1024];
> [...]
>    while( fscanf(archivo, "%s", mibuf) != EOF ) {
> [...]
> esto agarra un archivo llamado mitexto.txt y va leyendo las cadenas
> 

La familia *scanf tiene el problema que no limita el tamaño de lo que
lee. Sino que lee hasta un \n o el final. Si lee un fichero con una
linea superior a 1024 caracteres escribirá fuera de la variable
asignada y causará daños. En el peor de los casos imagina un fichero
binario como una imagen iso sin ningún caracter \n, leería en memoria
700 megas de un golpe bloqueando el ordenador causando otros daños.

Conclusion usar fscanf es complicarse la vida porque deja muchos cabos
sueltos que el programador no controla. De ahí que se use fgets (u
otros que si permitan limitar el tamaño de lo leido).

PD. Aunque pueda parecer de estupido copiar una iso como un fichero
txt, nunca se puede subestimar la capacidad de un usuario/programador
de hacer estupideces.

Atte. javier m mora



Reply to: