Código:
La estructura es asi:#include <string.h> #include <stdio.h> #include <stdlib.h> #include "config.h" #include "cadenas.h" #define EQ(str1,str2) (strcmp((str1),(str2))==0) #define FF(str1) str1[lcadena(str1)-1]=0 int main(int argc, char **argv) { FILE *df=NULL; struct usuario_config *config; char buffer[81]; char *distintive=NULL; char *part=NULL; int i=0; if((df=fopen(argv[1],"rt"))==NULL) { perror(argv[1]); exit(-1); } for(; (fgets(buffer,80,df))!=NULL ; i=0,memset(buffer,sizeof(buffer),'\0'),printf("Aqui me quedo\n")) { FF(buffer); while(buffer[i++]!='='); distintive=(char *)malloc(i*sizeof(char)); part=&buffer[i]; distintive=return_char(buffer,i-1,1); if(EQ(distintive,"nick")) { // printf("nick\n"); config->nick=strdup(part); printf("NICK->%s\n",config->nick); } else if(EQ(distintive,"path")) { // printf("path\n"); config->path=strdup(part); printf("PATH->%s\n",config->path); } else if(EQ(distintive,"nombre")) { // printf("Nombre\n"); config->path=strdup(part); printf("Nombre->%s\n",config->path); } else if(EQ(distintive,"puerto")) { //printf("port\n"); config->puerto=strdup(part); printf("PORT->%s\n",config->puerto); } else if(EQ(distintive,"edad")) { //printf("edad\n"); config->edad=strdup(part); printf("Edad->%s\n",config->edad); } else printf("cfg->erronea\n"); free(distintive); } fclose(df); return 0; }
Código:
struct usuario_config { char *nombre; char *nick; unsigned char *edad; unsigned char *puerto; char *path; };
Pues bien, el programa avanza hasta el 4 for que se ejecutara, cuando va a lanzar el 5, me da el fallo de segmentacion despues de mostrar: Aqui me quedo en el for. Un ejemplo:
Código:
Como veis, cuando va a lanzar el 5, se queda cortado, y la verdad no entiendo el error, depuree el programa con printf y es ahi donde se cuelga. Yo creo que porque uno de los 2 punteros esta apuntando hacie algo que no deberia, pero no caigo, a ver si me podeis echar un cable.PORT->2331 Aqui me quedo NICK->Leber Aqui me quedo Edad->90 Aqui me quedo PATH->/home/liquid/path Aqui me quedo Segmentation fault
Gracias de antemano, y un saludo