PDA

View Full Version : [c] errore strtok


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.

DanieleC88
11-04-2011, 10:52
char *ss = "pisa:livorno:22,4";

Ci scommetto quello che vuoi che la stringa tra virgolette č in una zona di memoria non scrivibile.
Fai cosė:
char ss[] = "pisa:livorno:22,4":
e riprova. Dovrebbe funzionare.

agosteeno
11-04-2011, 11:06
Hai vinto la scommessa!!! :) ho perso la mano coi puntatori, non mi e' proprio venuto in mente! Grazie mille per l'aiuto!

sottovento
11-04-2011, 13:29
Guarda che stai creando dei memory leak