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

ayuda para leer archivo en C caracter por caracter y almacenarlo en un char*

Estas en el tema de ayuda para leer archivo en C caracter por caracter y almacenarlo en un char* en el foro de C/C++ en Foros del Web. Hola, como andan? Tengo el siguiente problema al intentar leer linea a linea un archivo en C. Lo que hago es leer caracter por caracter ...
  #1 (permalink)  
Antiguo 05/10/2010, 08:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 6 meses
Puntos: 0
ayuda para leer archivo en C caracter por caracter y almacenarlo en un char*

Hola, como andan? Tengo el siguiente problema al intentar leer linea a linea un archivo en C.
Lo que hago es leer caracter por caracter y agregarlo a un buffer, aumentando el tamaño del mismo cada vez que leo un caracter. Tengo que hacer esto, debido a que no puedo usar fgets para no limitar el tamaño de la línea leida.
Hice el siguiente código, pero no me funciona, necesitaria alguna ayudita para saber donde la estoy pifiando. Muchas gracias!


Código C:
Ver original
  1. FILE* archivo = fopen("archivo.txt"],"r");;
  2. char * buffer = NULL;
  3. while(!feof(archivo)
  4. {      
  5.         buffer = (char*)realloc(NULL, sizeof(char));
  6.         int c = fgetc(archivo),
  7.         i = 0;
  8.         while( c != '\n')
  9.         {
  10.             buffer[i] = c;
  11.             i++;
  12.             buffer = (char*)realloc(buffer, (i+1)*sizeof(char));
  13.             c = fgetc(archivo);
  14.         }
  15.         /*Agrego el \n al buffer*/
  16.         buffer = (char*)realloc(buffer, (i+1)*sizeof(char));
  17.         buffer[i] = c;
  18.  
  19.        /*Trabajar con el buffer*/
  20.        free(buffer);
  21. }
  #2 (permalink)  
Antiguo 05/10/2010, 09:15
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

podrias indicarnos que error te marca, o por dices que no te funciona?
  #3 (permalink)  
Antiguo 05/10/2010, 10:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

No se si estoy asignando bien la memoria cuando hago realloc, y cuando uso el debugger, llega un momento que al agregar '\n' al buffer (cuando sale del ciclo), lo agrega mal, o sea, agrega el '\n' y un par de caracteres de mas en forma de basura...
Ese es el gran problema que tengo...
  #4 (permalink)  
Antiguo 05/10/2010, 12:29
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

Creo que falta agregar el fin de string

Código C++:
Ver original
  1. buffer = (char*)realloc(buffer, i+2 );   // sizeof(char) es 1
  2.  
  3. buffer[i] = c;
  4. buffer[i+1] = 0; //  <-- agregar esto
  #5 (permalink)  
Antiguo 06/10/2010, 01:08
 
Fecha de Ingreso: septiembre-2010
Ubicación: http://nomenrecordo.blogspot.com/
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

El fin de String te lo pone automáticamente,¿ porque no lo declaras del tipo cadena?
  #6 (permalink)  
Antiguo 06/10/2010, 06:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

El fin de string puesto "automaticamente" es un mito y una fuente usual de problemas en C, aunque puedo estar equivocado si se usa realloc?
  #7 (permalink)  
Antiguo 06/10/2010, 11:00
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: ayuda para leer archivo en C caracter por caracter y almacenarlo en un cha

Hola, soy nuevo en el foro, pero creo que te puedo ayudar con esto.

En realidad tienes varios problemillas.

Una sentencia la terminaste con , en lugar de ;
Declaras la variablec dentro del bucle while, hazlo fuera.
Siempre que trabajes con archivos trata de leer la cadena/caracter al final del bucle para que realmente pueda verificar si has llegado al final del archivo, he visto muchos problemas cuando leen al principio, como que no sale del bucle, o te arooja basura, y cosas por el estilo. bueno aqui te dejo tu codigo con algunos cambios que le hize, ya funciona correctamente.
Código:
 
#include <stdio.h>
#include <stdlib.h>

int main(){
  FILE* archivo = fopen("archivo.txt","r");
  char * buffer = NULL;
  int i, c;
  c = fgetc(archivo);
  while(!feof(archivo))
    {
      buffer = (char*)realloc(NULL, sizeof(char));
        i = 0;
      while( c != '\n')
        {
          buffer[i] = c;
          i++;
          buffer = (char*)realloc(buffer, (i+1)*sizeof(char));
          c = fgetc(archivo);
        }
      /*Agrego el \n al buffer*/
      buffer = (char*)realloc(buffer, (i+2)*sizeof(char));
      buffer[i] = c;
      buffer[i+1] = 0;
      /*Trabajar con el buffer*/
      printf("%s", buffer);
      free(buffer);
      c = fgetc(archivo);
    }
  close(archivo);
}

Saludos = 0;

Etiquetas: lectura
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 11:02.