|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
La strtok agisce sulla stringa di partenza impostando un terminatore in maniera opportuna e restituendo solamente il puntatore alla parte di stringa che, in un determinato momento, ha trovato.
Non crei nuove stringhe. Quindi, ad ogni strtok, ottieni solamente una "posizione" nella stringa e perdi la precedente. Dipende da cosa ci vuoi fare con le varie sottostringhe ma, in genere, ti potrebbe bastare copiarle con una strcpy in una stringa apposita che userai in seguito, man mano che le ottieni dalla strtok. |
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
sì ma quel che dico, alla seconda chiamata con NULL, non dovrebbe restituirmi il puntatore a "tette" ? Se no perde il senso la strtok o perlomeno su c++reference viene spiegato male
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Non capisco quello che dici ... forse è meglio parlare di codice
Partendo dal fatto che hai una stringa p come già detto, questo Codice:
char *tok = strtok(p, ";");
while (tok != NULL)
{
printf("%s\n", tok);
tok = strtok(NULL, ";");
}
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
Appunto. A me invece visualizza solo la prima, al secondo giro mi dà subito puntatore NULL
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Impossibile ... sicuramente non usi quel codice altrimenti avresti l'output completo.
Mostra esattamente il codice che usi e vedrai che ci sono differenze. |
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
ma forse è perchè ci ho annidato un'altra strtok?
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
Ok ho eliminato lo strtok annidato... e il problema era proprio quello.. Dovrò inventarmi qualcos'altro per sostituirlo.
|
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Se spieghi il perché dell'introduzione dell'altra chiamata a strtok, ti si potrà suggerire una strada corretta.
|
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
Perchè la stringa iniziale è formata così:
"bla , bla ; asdasd; albero, mela " Prima devo separare il punto e virgola e poi la virgola. Quindi ho usato dentro la strtok un'altra strtok per la virgola, ovviamente copiando la stringa in un altro array proprio per non intaccare la prima stringa. Però quando faccio strtok(NULL, ";") evidentemente sballa non essendoci niente che gli dica su quale stringa sta facendo la strtok |
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Se vuoi usare due separatori, inseriscili nella stessa strtok
tok = strtok(p, ",;") e strtok(NULL, ",;") |
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
Eh ma mi serviva proprio annidarlo per una questione algoritmica... A questo punto mi sa che il secondo strtok me lo costruisco da solo, grazie comunque dell'aiuto
|
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Come preferisci, ma i puntatori forniti dalla strtok li puoi sempre salvare e poi reimpostare a seconda delle necessità.
Ovviamente, non sapendo nulla di preciso circa quello che ti serve, non ti posso suggerire come utilizzare comunque le strtok. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:25.




















