[ Foro de C ]

La función fread() (y fwrite()).

24-Aug-2007 16:55
Carlos Ruiz
4 Respuestas

Hola de nuevo:

Tengo una duda:

Sabemos que la función fread (y fwrite) tiene los siguientes argumentos:

fread(void *ptr, size_t size, size_t nobj, FILE *stream);

...donde:ptr=Arreglo donde se guarda lo leido por fread();

             size=Tamaño del objeto a leer.

             nobj=Cantidad de objetos a leer.

             stream=Puntero hacia el archivo desde el que leemos.

Me gustaría saber: ¿Puede nobj tener el valor CERO?

He experimentado pero no compila... ¿Ké puedo hacer? ¿Ponerlo dentro de un if como: if(nobj!=0){fread(...);}?

Espero la respuestaa : )

Saludos.

Carlos.


26-Aug-2007 11:06
Nacho Cabanes (+30)

Si "nobj" es una variable, debería compilar en cualquier caso.

Lo que ocurre es que no tiene sentido decir que quieres leer 0 objetos. ¿Entonces por qué lees, si no pretendes leer nada?

Intentar leer un único objeto sí tendría sentido, o leer varios, y lo que tu compruebas si vale 0 es el resultado de esa operación, para asegurarte de si has podido leer algo o no:

resultado = fread(...
if (resultado == 0) mensajeDeError();


27-Aug-2007 05:49
Carlos Ruiz

Hola:

Gracias por la respuestaa...

Bueno, la verdad es que sí compila (habia otro error... la disciplina y rigurosidad nunca sobran... : ), pero una vez que compila el programa se cae. Y sí, en este caso "nobj" es una variable que eventualmente podría valer cero... y resulta que cuando vale cero, el programa colapsa. ¿QUé puedo hacer?

Ah, otra cosa... es cierto que "nobj" valiendo CERO podría parecer no tener sentido... pero la verdad es que, por raro que parezca, lo tiene, y de hecho necesito que sea así para lo que hace mi programa : )

Saludos.

Carlos.


29-Aug-2007 02:47
Nacho Cabanes (+30)

Perdona, pero tengo que discrepar.

Si tu programa tiene que intentar leer 0 datos de fichero, está mal diseñado. No tiene sentido pedir a tu programa que lea 0 datos. Para eso, directamente le dices que no lea:

if (nobj != 0) { fread(...); printf(...); ... }

que también podrías escribir (más "estilo C" pero algo menos legible):

if (nobj) { fread(...); printf(...); ... }


29-Aug-2007 07:02
Carlos Ruiz

Holap:

Sí, es verdad... no tiene sentido leer 0 objetos... :P

Por eso mejor es la solucion del principio:

if (nobj != 0) { fread(...); ...}

Gracias por la respuestaa.

SAludos.

Carlos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)