Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Por qué no funciona este código??

Estas en el tema de Por qué no funciona este código?? en el foro de C/C++ en Foros del Web. Holap: Al parecer todo está bien... o es que acaso hay algo sobre el funcionamiento de fread( ) que desconozco?? o_O El programa lee un ...
  #1 (permalink)  
Antiguo 11/05/2010, 23:13
 
Fecha de Ingreso: abril-2010
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Por qué no funciona este código??

Holap:

Al parecer todo está bien... o es que acaso hay algo sobre el funcionamiento de fread( ) que desconozco?? o_O

El programa lee un pedazo de un archivo de dos formas diferentes, y luego compara si ha leido lo mismo:

Código:
#include <stdio.h>

FILE* archivo;
unsigned char arreglo[20];
unsigned char arreglo2[20];
int i=0;

int main(){
    
archivo=fopen("gigahtz.exe","rb");
if(archivo==NULL){exit(1);}
    
fread(arreglo,1,20,archivo); 

rewind(archivo);
while(i<20)
{
fread(arreglo2,1,1,archivo); 
i++;
}
i=0;


while(i<20)
{
  if(arreglo[i]!=arreglo2[i])
  {
  printf("! ");
  exit(1);
  }
i++;              
}
printf("OKAY!");

fclose(archivo);
return 0;    
}
Compila y se ejecuta, pero sólo muestra: "!", o sea, el primer byte es diferente para las lecturas...

Help pliss...

Saludooos :P
  #2 (permalink)  
Antiguo 12/05/2010, 02:17
 
Fecha de Ingreso: mayo-2010
Ubicación: Belgica
Mensajes: 17
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Por qué no funciona este código??

si lo que quieres es leer carácter por carácter para el segundo arreglo, te aconsejo fgetc:

arreglo2[i]=fgetc(archivo);

en lugar de:

fread(arreglo2,1,1,archivo);

ó

para que tu codigo sea correcto

fread(&arreglo2[i],1,1,archivo);

&arreglo2[i] => le envias a fread la direccion de cada zona de memoria del arreglo

Última edición por fantasma21; 12/05/2010 a las 02:26
  #3 (permalink)  
Antiguo 12/05/2010, 13:34
 
Fecha de Ingreso: abril-2010
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Por qué no funciona este código??

Holap:

Gracias por la respuesta

Aunque me di cuenta de que el error consiste que cada byte leido por el "fread(arreglo2,1,1,archivo);" dentro del while, está guardando (y sobreescribiendo) todos los bytes en "arreglo[0]"... xD

Otra solución es simplemente cambiar:

Código:
while(i<20)
{
fread(arreglo2,1,1,archivo); 
i++;
}
por

Código:
while(i<20)
{
fread(arreglo2+i,1,1,archivo); 
i++;
}
Saludos y gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:11.