Buenas, estaba haciendo un fichero de .cfg y una mini-funcion que leyera el fichero y rellenara una estructura con la .cfg correspondiente, aqui el codigo:
Código:
#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;
}
La estructura es asi:
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:
PORT->2331
Aqui me quedo
NICK->Leber
Aqui me quedo
Edad->90
Aqui me quedo
PATH->/home/liquid/path
Aqui me quedo
Segmentation fault
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.
Gracias de antemano, y un saludo