elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con basura en fread
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con basura en fread  (Leído 2,330 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Ayuda con basura en fread
« en: 1 Abril 2016, 20:03 pm »

Hola, amigos, estoy haciendo pequeños experimentos, y necesito leer un archivo.

Resulta que el codigo lo que hace es cargar el archivo en una memoria dinamica a traves de un puntero, pero al usar fread capta algo como "COM;<" al final del archivo, cosa que no es verdad.

No sé de donde aparece, pero les dejo el codigo, por si pueden ayudar, gracias.

Código
  1. ///This program receives a list of files in a text file, and glue togheter with a plus:
  2. ///all are compressed. The program can extract one file if the user wants it. The package
  3. ///can not be modified.
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. struct package_header{
  9.    int magic_number; //0xDEADBEFF;
  10.    int number_of_files_stored;
  11. };
  12.  
  13. struct file_entry{
  14.    char file_name[64];
  15.    int file_start;
  16.    int file_size;
  17. };
  18.  
  19. int main(int argc, char *argv[])
  20. {
  21.    if(argc < 2){
  22.        printf("Usage: mesa-pack.exe <list of files to package.txt>\n");
  23.    }
  24.  
  25.    FILE *list_of_files;
  26.    FILE *package;
  27.    int filesize;
  28.    char *content;
  29.    char *token;
  30.  
  31.    list_of_files = fopen(argv[1], "rb");
  32.    if(list_of_files == NULL){
  33.        printf("File list is damaged or computer unexpected error while opening file. Try again.\n");
  34.        return -1;
  35.    }
  36.  
  37.    fseek(list_of_files, 0, SEEK_END);
  38.    filesize = ftell(list_of_files);
  39.    fseek(list_of_files, 0, SEEK_SET);
  40.  
  41.    content = (char *)calloc(filesize, sizeof(char));
  42.  
  43.    //memset(content, 0, filesize);
  44.  
  45.  
  46.    fread((char *) content, filesize, 1, list_of_files);
  47.  
  48.    printf("filesize = %d\n", filesize);
  49.    printf("File content: %s\n", content);
  50.  
  51.    printf("Showing list of files to package...\n\n");
  52.    token = strtok(content, "\n");
  53.    while(token != NULL){
  54.        printf("token = %s\n", token);
  55.        token = strtok(NULL, "\n");
  56.  
  57.    }
  58.  
  59.    free(content);
  60.  
  61.  
  62.    return 0;
  63. }
  64.  
  65.  

http://subefotos.com/ver/?dba9f455a39df69e79173249a0764a0fo.jpg


En línea

Vista mi blog es enriquemesa.blogspot.com
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Ayuda con basura en fread
« Respuesta #1 en: 1 Abril 2016, 20:19 pm »

Yo creo que el problema reside en que fread no pone un carácter de fin de cadena al final de la cadena 'content'. Para solucionar esto, primero en la memoria dinámica tendrías que darle un byte más y luego añadir un carácter de fin de cadena (el cual es '\0') para que así el programa sepa el fin de la cadena.


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: Ayuda con basura en fread
« Respuesta #2 en: 2 Abril 2016, 14:54 pm »

Gracias openGL, probé la solucion y sirvio. Hay veces que eso no pasa, como en otro programa que tengo.
En línea

Vista mi blog es enriquemesa.blogspot.com
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Ayuda con basura en fread
« Respuesta #3 en: 2 Abril 2016, 15:30 pm »

No pasa porque por casualidad, justo después de tu cadena (en la memoria) hay un carácter nulo (el que indica fin de cadena). En un ejecutable suelen haber muchos de estos caracteres, por eso no es raro que te haya coincidido :D
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda fread « 1 2 »
Programación C/C++
Gr1nD3r 10 6,303 Último mensaje 29 Julio 2010, 21:20 pm
por Horricreu
Duda con fread
Programación C/C++
Gr1nD3r 1 2,649 Último mensaje 10 Agosto 2010, 21:24 pm
por Littlehorse
fread y fwrite con clases
Programación C/C++
newone 4 4,917 Último mensaje 23 Junio 2011, 23:40 pm
por newone
Usos fwrite, fread
Programación C/C++
diegoCmC 4 5,627 Último mensaje 13 Septiembre 2012, 21:42 pm
por diegoCmC
Función fread y saltos de línea
Programación C/C++
NathanD 8 6,023 Último mensaje 20 Marzo 2013, 20:25 pm
por NathanD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines