PDA

Visualizza la versione completa : [c]problema strtok


esoni
21-05-2010, 14:08
salve amici ho un problema :vorrei data una stringa del tipo "aaa,bbb,ccc,ddd,eee.lo" stampare ogni sottostringa seprata dal separatore "," tranne l ultima sottostringa(nell esempio eee.lo) che la voglio invece salvare in una stringa per un altra elaborazione...come posso fare? mi sono avvicinato alla soluzione
int main()
{
char s[] = "aaa,bbb,ccc,ddd,eee.lo";
char* p;
printf("Stringa completa: \n %s\nStringa spezzata:\n",s);
p = strtok(s, ",");
while (p != NULL)
{
printf("%s\n", p);
p = strtok(NULL, ",");
}
return 0;
}
stampa
aaa
bbb
ccc
ddd
eee.lo


io vorrei che stampasse


aaa
bbb
ccc
ddd

e che mi salvasse l ultima sottostringa in una variabile char *ultimo...ho provato in tutti i modi ma non riesco...chi puo darmi una mano ??
grazie

Kej
21-05-2010, 14:21
int main()
{
char s[] = "aaa,bbb,ccc,ddd,eee.lo";
char* p;
char *ultimo;
printf("Stringa completa: \n %s\nStringa spezzata:\n",s);
p = strtok(s, ",");
while (p != NULL)
{
printf("%s\n", p);
strcpy(ultimo, p);
p = strtok(NULL, ",");
}
return 0;
}

esoni
21-05-2010, 14:35
la tua soluzione proposta errata stampa solo
aaa

oregon
21-05-2010, 14:44
while(p)
{
ultimo=p;
p = strtok(NULL, ",");
if(p) printf("%s\n", ultimo);
}

printf("ultimo: %s\n", ultimo);

Kej
21-05-2010, 14:50
Originariamente inviato da esoni
la tua soluzione proposta errata stampa solo
aaa

L'ho provata ora, compilandola con Dev-C, e funziona.

Ma comunque la soluzione di oregon molto pi elegante :)

oregon
21-05-2010, 14:56
Originariamente inviato da Kej
L'ho provata ora, compilandola con Dev-C, e funziona.


Scusa Kej, ma il puntatore ultimo non punta ad una zona di memoria allocata e quindi l'uso della strcpy sicuramente sbagliato (con effetti imprevedibili, pu sovrascrivere memoria senza accorgersene o crashare).

Loading