› Foros › PC › Software libre
int main(int argc,char **argv)
{
if (strcmp(argv[1],"--file")==0 || strcmp(argv[1],"-f")==0 && argc==3)
TrataFichero(argv[2]);
else
TrataParametros(argc,argv);
exit (EXIT_SUCCESS);
}//main
void TrataParametros(int fargc, char **fargv)//AQUI RECIBE LA DIRECCION DE LA MATRIZ, Y NO APUNTA A LA MATRIZ
{
.................................................................................//aqui habría mas codigo
while(1) //en el while trato los parametros con getopt_long()
{
opcio=getopt_long (fargc, fargv, opCurtes, opLlargues, NULL);
//llamada a getopt_long()AQUI ES DONDE DA LA VIOLACIÓN DE SEGMENTO .........................................//seguiría la función
void TrataFichero(char *fitxer)
{
unsigned int fargc,entra,i;
char s1[100];
char s2[4]=" \n\t";
char *ptr;
char fargv[30][20]; //DECLARACIÓN DE LA MATRIZ
if ((arxiu=fopen(fitxer,"r")) == NULL)
{
ErrorP('7',fitxer);
exit(EXIT_FAILURE);
}
else
{
strcpy(fargv[0],NOM);
mode=1;
while (!feof(arxiu))
{
fargc=1;
entra=0;
fgets(s1,100,arxiu);
ptr = strtok( s1, s2 );
if (ptr!=NULL)
{
strcpy(fargv[fargc],ptr);
while( (ptr = strtok( NULL, s2 )) != NULL )
{
entra=1;
fargc++;
strcpy(fargv[fargc],ptr);
}
fargc++;
if (entra==1)
TrataParametros(fargc,fargv); //AQUI ES DONDE PASO EL ARGUMENTO Y NO LO PUEDE LEER PORQUE LOS CONSIDERA DIFERENTES TIPOS DE DATOS
}
mode++;
}
fclose(arxiu);
}
}
void TrataFichero(char *fitxer)
{
unsigned int fargc,entra,i;
char s1[100];
char s2[4]=" \n\t";
char *ptr;
char **fargv;
if ((arxiu=fopen(fitxer,"r")) == NULL)
{
ErrorP('7',fitxer);
exit(EXIT_FAILURE);
}
else
{
mode=1;
while (!feof(arxiu))
{
fargv=(char **)malloc(sizeof(char *)*30);
fargv[0]=(char *)malloc(sizeof(NOM));
strcpy(fargv[0],NOM);
fargc=1;
entra=0;
fgets(s1,100,arxiu);
ptr = strtok( s1, s2 );
if (ptr!=NULL)
{
fargv[fargc]=(char *)malloc(sizeof(ptr));
strcpy(fargv[fargc],ptr);
while( (ptr = strtok( NULL, s2 )) != NULL )
{
entra=1;
fargc++;
fargv[fargc]=(char *)malloc(sizeof(ptr));
strcpy(fargv[fargc],ptr);
}
fargc++;
printf("%d",fargc);
if (entra==1)
TrataParametros(fargc,fargv);
for (i=(fargc-1);i>0;i--)
free(fargv[i]);
free(fargv);
}
mode++;//marcará la línea que s'està tractant als paràmetres a l'hora de donar error.
}
fclose(arxiu);
}
}