Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/03/2013, 13:25
Avatar de guzzano
guzzano
 
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Problema al parsear un archivo

Buenos días, tengo un problema al parsear una cadena de un archivo, llevo tres días tratando de solucionarlo, así que recurriré a ustedes.

El programa parsea esta linea de un archivo:
Código C:
Ver original
  1. # Depends on: fontconfig-32 freeglut-32 xorg-libxcomposite-32 xorg-libxcursor-32 xorg-libxinerama-32 xorg-libxrandr-32 xorg-libxxf86dga-32 alsa-lib-32 libpng-32 libjpeg-32 prelink

El problema está en que me imprime siempre un residuo de la cadena anterior, a ver... este es el código:

Código C:
Ver original
  1. int main(int argc, char *argv[]) {
  2.     char *pkgfile = search_pkgfile("wine");
  3.     char *test;
  4.      
  5.     while ((test = dependencies_pkgfile(pkgfile)) != NULL) {
  6.         printf("%s\n", test);
  7.         free(test);
  8.     }
  9.    
  10.     free(pkgfile);
  11.     return 0;
  12. }
  13.  
  14. char *dependencies_pkgfile (char *dir_pkgfile)
  15. {
  16.     FILE *pkgfile = fopen(dir_pkgfile, "r");
  17.     static int c_n = 0;
  18.     static char depends_p[2000];
  19.     char *depends_po = depends_p;
  20.    
  21.     while ((fgets(depends_p, sizeof(depends_p), pkgfile) != NULL)) {
  22.         if (strncmp(depends_p, "# Depends on:", 13) == 0) {
  23.             depends_po = (depends_po+c_n)+13;
  24.            
  25.            
  26.             while (!(isalpha(*depends_po)) && (*depends_po != '\0' && depends_po++));
  27.             if (*depends_po == '\0') {
  28.                 fclose(pkgfile);
  29.                 return NULL;
  30.             }
  31.             else {
  32.                 depends_po = depends_po-1;
  33.             }
  34.            
  35.             char *depends = malloc(0);
  36.             int c_d = 0;
  37.            
  38.             while (*depends_po != '\0' && depends_po++) {
  39.                 if ((*depends_po == ' ' || *depends_po == '\0') && *(depends_po-1) != ' ') {
  40.                     depends = realloc(depends, c_d+1);
  41.                     depends[c_d] = '\0';
  42.                    
  43.                     fclose(pkgfile);
  44.                     return depends;
  45.                 }
  46.                 else if ((isalpha(*depends_po)) || (isdigit(*depends_po)) || *depends_po == '-') {
  47.                     depends = realloc(depends, c_d+1);
  48.                     depends[c_d] = *depends_po;
  49.                    
  50.                     c_d++;
  51.                     c_n++;
  52.                 }
  53.             }
  54.            
  55.             fclose(pkgfile);
  56.             return NULL;
  57.         }
  58.     }
  59.    
  60.     fclose(pkgfile);
  61.     return NULL;
  62. }

Y me imprime así:

Código HTML:
Ver original
  1. fontconfig-32
  2. freeglut-32
  3. xorg-libxcomposite-32
  4. xorg-libxcursor-32
  5. r-32 #Esto no deberia imprimirlo
  6. xorg-libxinerama-32
  7. xorg-libxrandr-32
  8. xorg-libxxf86dga-32
  9. alsa-lib-32
  10. b-32 #Esto no deberia imprimirlo
  11. libpng-32
  12. libjpeg-32
  13. prelink
  14. ink  #Esto no deberia imprimirlo

Espero su ayuda, muchisimas gracas.