Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    26

    [C] Maledette struct :D

    Ho bisogno di aiuto!!!
    ormai sono in completa confusione.
    Devo prendere le parole da dei file che passo come argomenti. volevo immagazzinare le parole e i file proprietari in una struct, potete mica dirmi dove sbaglio?
    il programma che ho iniziato a buttare giu' e' questo

    #include <stdio.h>
    #include <string.h>


    static struct file {
    char *parola;
    char *array[];
    };
    static struct file indicizzare[10];


    int main(int argc, char *argv[])
    {
    char appoggio[50];
    int i=0;
    int j=0;
    //creazione struttura file da indicizzare
    for(i=1;i<=(argc-1);i++)
    {
    FILE *f2 = fopen(argv[i],"r");
    while(!feof(f2))
    {
    fscanf(f2,"%s",appoggio);
    indicizzare[j].parola = appoggio;
    indicizzare[j].array[0]= argv[i];
    j++;
    }
    }
    }

    volevo creare cioe' una struttura con campo parola per memorizzare le parole e con campo array per memorizzare i file che contengono quella parola.
    ho provato a fare dei test e non capisco il perche' del risultato.
    1) Se metto dentro al while
    printf("%s",indicizzare[j].parola)
    printf("%s",indicizzare[j].array[0])
    tutto ok mi stampa la parola con il file a cui appartiene
    2) Se le due printf precedenti le metto fuori dal for per vedere se tutto e' andato a buon fine mi accorgo che qualunque valore io dia a j mi stampa l'ultima stringa letta dalla fscanf, perche'?



    Ps sono un novellino non mi maltrattate se ho scritto strafalcioni

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] Maledette struct :D

    Originariamente inviato da giaga
    Devo prendere le parole da dei file che passo come argomenti. volevo immagazzinare le parole e i file proprietari in una struct, potete mica dirmi dove sbaglio?
    Purtroppo ci sono diverse cose che non vanno nel tuo codice.

    Innanzitutto nella struttura la variabile 'array' è senza dimensione (ed è sbagliato e il compilatore dovrebbe pure segnalartelo).
    Poi c'è un problema concettuale abbastanza grosso. Nel main hai un array di char 'appoggio' che contiene, di volta in volta, le stringhe lette dal file. L'indirizzo di questo array lo assegni al puntatore 'parola' nelle strutture (in array). Il problema è che tutti quei puntatori 'parola' puntano alla stessa identica area di memoria (appunto 'appoggio') che tu scrivi e sovrascrivi ogni volta!!!
    Quindi nelle strutture non memorizzi diverse parole ... ma una sola, quella contenuta in 'appoggio' e puntata dai puntatori 'parola'.

    Poi le solite cose che mancano: il controllo del valore di ritorno di fopen, la chiusura del file, il return alla fine del main.

    Originariamente inviato da giaga
    Ps sono un novellino non mi maltrattate se ho scritto strafalcioni
    No problem ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema principale e' che non hai compreso bene il trattamento delle stringhe di C.

    Nella struttura hai inserito un semplice puntatore a stringa

    char *parola;

    e non un array di caratteri, come dovrebbe essere.

    Anche perche' quando scrivi

    indicizzare[j].parola = appoggio;

    non fai altro che assegnare al puntatore parola il valore del puntatore appoggio ma non copi i caratteri come pensi.

    Dato che non usi allocazione dinamica delle stringhe, puoi correggere la struttura con

    char parola[50];

    ed eliminare la stringa appoggio dato che puoi scrivere direttamente

    fscanf(f2, "%s", indicizzare[j].parola);

    Per quanto riguarda l'altro elemento della struttura, non ho capito cosa dovrebbe contenere dato che anche questo non e' mai stato allocato.

    P.S. Oops ... arrivato secondo ...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    26
    grazie, molto molto utili ora funziona!!!
    pero' mi funziona anche senza inizializzare array e l'altro elemento della struttura mi serve per la seconda parte del prog grazie mille

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 © 2025 vBulletin Solutions, Inc. All rights reserved.