Salve a tutti, ho un file di testo in cui i dati sono salvati, riga per riga, nel seguente formato:
parola1;parola2;parola3
Io devo salvare ogni parola in una stringa differente. A tal proposito, avevo provato con un
codice:
fscanf(file.txt, "%s;%s;%s", stringa1, srtinga2, stringa3);
pensando che la fscanf() funzionasse come la scanf() e che fosse quindi in grado di scaratare i ';'(Cosa che mi sembra di capire sia falsa).
Il risultato però era sballatissimo da quello che sarebbe dovuto essere, quindi ho provato un'altra soluzione: Leggo tutta la parola, la salvo in una stringa unica, compresi i ';', e poi la passo a una funzione che dovrebbe spezzare la stringa nelle tre sotto stringhe di cui ho bisogno.
La funzione è questa:
codice:
void stringTokenizer(char *src, char *s1, char *s2, char *s3, char sep) {
char *index;
index = strchr(src, sep);
strncpy(s1, src, index - src);
src = index + 1;
index = strchr(src, sep);
strncpy(s2, src, index - src);
src = index + 1;
strcpy(s3, src);
}
Questa funzione(Che non funziona, anche in questo caso l'output è orrendo) lavora sui puntatori a caratteri. Quello che non capisco è questo:
codice:
void stringTokenizer(char *src, char *s1, char *s2, char *s3, char sep) {
char *index;
index = strchr(src, sep); //index è l'indirizzo di memoria del primo ';'
strncpy(s1, src, index - src); //Parte che non capisco
Nell'istruzione della "parte che non capisco", il numero di caratteri che devono essere copiati da src a s1
è dato da index-src. Questa operazione tra puntatori, non dovrebbe darmi il numero di celle di memoria/caratteri prima del primo ';' ? Questo era quello che pensavo di aver capito, ma ho fatto stampare ad output index-src e viene un numero altissimo(Ho fatto una prova in cui sarebbe dovuto essere 5, e il risultato era un numero sull'ordine di grandezza delle migliaia). Qualcuno mi può spiegare cosa non ho capito? Grazie in anticipo.