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

Duda curiosa con fgets

Estas en el tema de Duda curiosa con fgets en el foro de C/C++ en Foros del Web. Buenas, tengo una duda curiosa. La función fgets obviamente necesita un tamaño en el buffer pero ¿si no tenemos este tamaño? pensé en recorrer el ...
  #1 (permalink)  
Antiguo 10/12/2012, 07:45
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Duda curiosa con fgets

Buenas, tengo una duda curiosa. La función fgets obviamente necesita un tamaño en el buffer pero ¿si no tenemos este tamaño? pensé en recorrer el archivo letra por linea y con memoria dinamica ir abriendo espacio pero es un poco lenta.

¿Existe alguna forma de saber el tamaño de la linea para abrirle espacio a fgets?
  #2 (permalink)  
Antiguo 10/12/2012, 10:27
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Duda curiosa con fgets

Cita:
La función fgets obviamente necesita un tamaño en el buffer pero ¿si no tenemos este tamaño?
generalmente cuando no se tiene el tamaño del buffer se crea un arreglo de TAM_MAX, osea un define echo por vos. En la mayoria de los ejercicios, cuando se trabaja con txt, el tamaño maximo por linea es de 255 caracteres.
Luego de obtener la linea se hace un strlen() de la cadena y recien se crea un arreglo dinamico del tamaño devuelto por strlen

Cita:
pensé en recorrer el archivo letra por linea y con memoria dinamica ir abriendo espacio pero es un poco lenta.
nose a que llamas lento, habria que ver como lo hiciste, el problema puede estar en el codigo


Saludos
  #3 (permalink)  
Antiguo 11/12/2012, 12:25
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: Duda curiosa con fgets

Buenas, de primeras un metodo cutre pero que te puede servir es usar fgets con una cadena, y si aun no hay un cambio de linea, usar fgets con otra cadena y luego hacer un strcat() o algo asi.
Es algo cutre pero puede servir.



Saludos
  #4 (permalink)  
Antiguo 12/12/2012, 15:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: Duda curiosa con fgets

Hola,

la función fgets() deja de leer cuando encuentra 'EOF' (final de fichero) o un carácter de salto de línea, por lo que si intentas leer 256 caracteres (tal y como te dice cesar_casla) y la línea termina antes, no tendrás ningún problema.

Puedes leer más sobre la función fgets en el terminal de linux introduciendo la orden man fgets o en la dirección http://man7.org/linux/man-pages/man3/gets.3.html

Un saludo,
gonzo
  #5 (permalink)  
Antiguo 14/12/2012, 02:21
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Duda curiosa con fgets

Gracias a todos por sus respuestas, la verdad no me supe explicar bien. Supongamos que intento leer una linea de 300, pero leo solamente 256, entonces me estaria cortando la linea (que es muy importante que la tenga correcta)

Solucione el problema de esta manera,
Código C:
Ver original
  1. void depends_parser(FILE *pkgfile_dir)
  2. {
  3.     char character, last_character = 0, *string_depends = NULL;
  4.     int count_character = 0, count_memory_add_string = 1;
  5.    
  6.     while ((character = getc(pkgfile_dir)) != EOF)
  7.     {
  8.         if (last_character == '\n' && character != '#')
  9.         {
  10.             break;
  11.         }
  12.         else
  13.         {
  14.                
  15.             string_depends = (char *) realloc(string_depends, count_memory_add_string);
  16.             string_depends[count_character] = character;
  17.             last_character = character;
  18.            
  19.             count_character++;
  20.             count_memory_add_string++;
  21.         }
  22.     }
  23. }

Ahí me copia todo lo que queria a una variable, y guardo el numero de caracteres antes del \n para con un bucle utilizar fgets de acuerdo al tamaño.

Muchas gracias! :)
  #6 (permalink)  
Antiguo 14/12/2012, 10:45
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Duda curiosa con fgets

Lo que faltaria es agregar el caracter '\0' al puntero string_depends, sino podes tener problemas con algunas funciones


Saludos

Etiquetas: fgets
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 13:11.