agosteeno
11-04-2011, 10:38
Salve a tutti, sto' realizzando una funzione che deve smontare una stringa in alcune sotto stringhe. Passo per parametro la stringa da smontare e i puntatori alle sottostringhe (in modo che al ritorno dalla funzione in esse ci siano i valori) e un puntatore a double per il terzo parametro.
La stringa e ha questo formato:
primastringa:secondastringa:numerodouble
Questo il codice della funzione:
bool_t smontaStringa(char *e, char **sorg, char **dest, double *dist)
{
*sorg = strtok(e, ":");
*dest = strtok(NULL, ":");
*dist = strtod(strtok(NULL, ":"), NULL);
if(*dist == 0) return (FALSE);
printf("test smontaStringa: %s, %s, %e", *sorg, *dest, *dist);
return TRUE;
}
bool_t e' un enum per simulare i booleani, ma alla fine e' un intero
Il codice di test e' questo:
int main()
{
char *sorg = (char *) malloc(50);
char *dest = (char *) malloc(50);
double dist;
char *ss = "pisa:livorno:22,4";
if(smontaStringa(ss,&sorg,&dest,&dist))printf("Corretto!\n");
else printf("passo 1: Errato!\n");
return 0;
}
Alla prima esecuzione di strtok mi da' un segmentation fault e non capisco cosa sbaglio. Ultimamente ho programmato parecchio in Java, quindi ho perso un po' di manualita' col c, qualcuno ha capito cosa sbaglio? Credo sia l'allocazione di memoria delle stringhe passate come parametro, ma sinceramente nn mi rendo conto di cosa non vada.
La stringa e ha questo formato:
primastringa:secondastringa:numerodouble
Questo il codice della funzione:
bool_t smontaStringa(char *e, char **sorg, char **dest, double *dist)
{
*sorg = strtok(e, ":");
*dest = strtok(NULL, ":");
*dist = strtod(strtok(NULL, ":"), NULL);
if(*dist == 0) return (FALSE);
printf("test smontaStringa: %s, %s, %e", *sorg, *dest, *dist);
return TRUE;
}
bool_t e' un enum per simulare i booleani, ma alla fine e' un intero
Il codice di test e' questo:
int main()
{
char *sorg = (char *) malloc(50);
char *dest = (char *) malloc(50);
double dist;
char *ss = "pisa:livorno:22,4";
if(smontaStringa(ss,&sorg,&dest,&dist))printf("Corretto!\n");
else printf("passo 1: Errato!\n");
return 0;
}
Alla prima esecuzione di strtok mi da' un segmentation fault e non capisco cosa sbaglio. Ultimamente ho programmato parecchio in Java, quindi ho perso un po' di manualita' col c, qualcuno ha capito cosa sbaglio? Credo sia l'allocazione di memoria delle stringhe passate come parametro, ma sinceramente nn mi rendo conto di cosa non vada.