Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Problema con la lettura di parole da file di testo.

    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.

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    fscanf(file.txt, "%s;%s;%s", stringa1, srtinga2, stringa3);
    file.txt che dovrebbe essere?? Prova con "%s;%s;%s\n"

    In ogni caso quel codice che hai scritto è sbagliato perché strncpy non appende il terminatore di stringa ( '\0' ).

    Poi è molto più semplice fare tre strtok:
    codice:
    strcpy(s1, strtok(src, ";"));
    strcpy(s2, strtok(NULL, ";"));
    strcpy(s3, strtok(NULL, "\n"));
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.