leadergl
13-01-2006, 08:25
Raga ho scritto questo codice per separare/estrarre, qualora mi dovesse servire, una sottostringa da una stringa originaria formattata in un determinato modo!
Es:
ho la stringa:
ciao mamma come va|oggi piove|4|cavallo
dove il mio carattere separatore è |
questo codice mi dovrebbe permettere di estrarre a piacere una delle quattro frasi/parole che si trovano tra ogni |, ma ci deve stare qualche errore subdolo:
char *separa(char *stringa, int occorrenze)
{
int numero; // contatore globale
int num; // contatore locale
char *destinazione=NULL;
destinazione=(char *)malloc(sizeof(strlen(stringa))+1);
numero=0;
while (occorrenze>0)
{
num=0;
while(stringa[numero]!='|')
{
destinazione[num]=stringa[numero];
numero++;
num++;
}
destinazione[num] = '\0';
occorrenze--;
numero++;
}
return destinazione;
}
Esempio:
[code]
int main()
{
char *temp=NULL;
char *origine="ciao mamma|2|prr|";
temp=separa(origine,2); //mi restituisce 2
system("PAUSE");
return 0;
}
se però eseguo più di una volta la chiamata quella funzione si verificano anomalie nel funzionamento del programma.....perchè? dove sbaglio?
Es:
ho la stringa:
ciao mamma come va|oggi piove|4|cavallo
dove il mio carattere separatore è |
questo codice mi dovrebbe permettere di estrarre a piacere una delle quattro frasi/parole che si trovano tra ogni |, ma ci deve stare qualche errore subdolo:
char *separa(char *stringa, int occorrenze)
{
int numero; // contatore globale
int num; // contatore locale
char *destinazione=NULL;
destinazione=(char *)malloc(sizeof(strlen(stringa))+1);
numero=0;
while (occorrenze>0)
{
num=0;
while(stringa[numero]!='|')
{
destinazione[num]=stringa[numero];
numero++;
num++;
}
destinazione[num] = '\0';
occorrenze--;
numero++;
}
return destinazione;
}
Esempio:
[code]
int main()
{
char *temp=NULL;
char *origine="ciao mamma|2|prr|";
temp=separa(origine,2); //mi restituisce 2
system("PAUSE");
return 0;
}
se però eseguo più di una volta la chiamata quella funzione si verificano anomalie nel funzionamento del programma.....perchè? dove sbaglio?