|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
[C] problemi con la strtock()
quello che vorrei ottenere dalla buf[] sotto è il seguente output sfruttando le caratteristiche tella strtock():
192.168.84.211 NOME1 F 105 3 il problema è che una volta arrivati al carattere F non è più sfruttabile tale strategia: cosa mi sfugge? Codice:
#include <stdio.h>
#include <string.h>
int main()
{
char *p;
char buf [] = "192.168.84.211,NOME1,F105.3";
p = strtok (buf, ",");
if (p != NULL)
printf ("trovato: %s\n", p);
p = strtok (NULL, ",");
if (p != NULL)
printf ("trovato: %s\n", p);
p = strtok (NULL, "F");
if (p != NULL)
printf ("trovato: %s\n", p);
return 0;
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Credo che non ti sfugga niente. Una volta estratto il terzo campo devi parsarlo in base al suo specifico formato.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
ed invece facendo ulteriori prove ho notato che la strtok() modifica buf ma non mi spiego come e perchè Codice:
#include <stdio.h>
#include <string.h>
int main()
{
char *p;
char buf [] = "192.168.84.211,NOME1,F105.3";
p = strtok (buf, ",");
while(p != NULL)
{
printf ("trovato: %s\n", p);
p = strtok (NULL, ",");
}
p = strtok (buf, "F");
printf ("contenuto di buf dopo il while: %s\n", buf);
while(p != NULL)
{
printf ("trovato: %s\n", p);
p = strtok (NULL, "\n");
}
return 0;
}
output primo while trovato: 192.168.84.211 trovato: NOME1 trovato: F105.3 contenuto di buf dopo il while: 192.168.84.211 output secondo while trovato: 192.168.84.211 |
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
E' corretto. In pratica al posto del separatore (token) viene inserito il terminatore nullo. Per quello che ti serve devi eseguire il parsing solo sul terzo campo (quello che ti interessa splittare) non di nuovo su tutto il buffer. E non è detto che debba utilizzare ancora la strtok, dipende dal formato. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
Dopo varie prove ho scoperto casualmente che la strtock() modifica la stringa originale e quindi dopo un primo passaggio ero convinto di avere in buf tutta la stringa ed invece non è così. |
|
|
|
|
|
|
#6 | ||
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Quote:
http://www.cplusplus.com/reference/c...string/strtok/ "This end of the token is automatically replaced by a null-character by the function, and the beginning of the token is returned by the function." |
||
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
Se dovessi usare un ciclo per scansire l'intera stringa dovrei scrivere molto più codice |
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Può darsi, forse neanche molto di più, ma nessuno ti ha suggerito di farlo. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:18.




















