Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: [C] lettura da file

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    18

    [C] lettura da file

    buonasera, ho un file scritto cosi' (nella forma
    codice:
    network_address, next_hop
    :

    187.96.0.0 , R1
    132.255.0.0 R2
    15. 0.0.0 R3

    delle strutture:
    codice:
    typedef struct {    
        int first;
        int second;
        int third;
        int fourth;
        }address;
        
    typedef struct {
        address source;
        address dest;
        char *data;
        }packet;
        
    typedef struct {
        address network_num;
        int next_hop;
        }entry;
    Il contenuto del file va inserito in una tabella
    codice:
    entry table[]
    trovo delle difficoltè nel prelevare i giusti valori, potreste darmi delle dritte? Grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    usa la strtok()

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    18
    EDIT
    intanto ho modficato quel
    codice:
    int  next_hop;
    in
    codice:
    char *next_hop (modficato);
    e ho messo come lettura:
    codice:
    fscanf(fp, "%s", &table[i].next_hop);
    facendo varie prove i vari R1 R2 R3 li legge correttamente, solo che il compiliatore ripora il seguente warning:
    codice:
    esercizio_6.c:76:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char **’ [-Wformat]
    . Provando a togliere &, in fase esecuzione esce
    codice:
    Segmentation fault (core dumped)
    come mai?
    Ultima modifica di linofex; 22-06-2015 a 20:56

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Come mai?

    Se è un intero non ci va %s ma %d ... ma non è chiaro ... prima dici che hai cambiato in un puntatore a char e poi usi il vecchio elemento intero ...

    Spiegati meglio con il codice attuale.
    Ultima modifica di oregon; 22-06-2015 a 20:47
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Come mai?

    Se è un intero non ci va %s ma %d ... ma non è chiaro ... prima dici che hai cambiato in un puntatore a char e poi usi il vecchio elemento intero ...

    Spiegati meglio con il codice attuale.
    Ho sbagliato a scrivere il messaggio (ora corretto).

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Quote Originariamente inviata da linofex Visualizza il messaggio
    Ho sbagliato a scrivere il messaggio (ora corretto).
    Ok ... se è un char * allora va prima allocato lo spazio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ok ... se è un char * allora va prima allocato lo spazio ...
    Ecco! stavo avendo dei problemi in fase di compilazione, non so lavorare bene con i puntatori a stringa "senza array".
    ho questa funzione:
    codice:
    int route (packet pac, entry table[], char *router){    
    address s_address;
    int i =0, FOUND = 1;
    s_address = network(pac.dest); // ritorna una struct di tipo address
        do{
            if (table[i].network_num.first == s_address.first && 
            table[i].network_num.second == s_address.second && 
            table[i].network_num.third == s_address.third){
                FOUND = 0;
                *router = table[i].next_hop; //ERRORE
            }
            else *router ="default"; //ERRORE
            i++;
        }while (FOUND && i<MAXENTRY);
        return FOUND;
        
    
    
    }
    dove nel main ho dichiarato
    codice:
    char *router
    , come faccio a inserire una stringa in router?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Lavorare con codici simili avendo queste lacune di base non è consigliabile.

    Per copiare stringhe devi usare la funzione strcpy (o simili), ad esempio

    strcpy(router, table[i].next_hop);

    e

    strcpy(router, "default");

    ma, ovviamente, sia i puntatore router sia table[i].next_hop devono puntare a spazio allocato.

    E comunque, cosa c'entra questo con il problema iniziale della lettura del file?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Lavorare con codici simili avendo queste lacune di base non è consigliabile.

    Per copiare stringhe devi usare la funzione strcpy (o simili), ad esempio

    strcpy(router, table[i].next_hop);

    e

    strcpy(router, "default");

    ma, ovviamente, sia i puntatore router sia table[i].next_hop devono puntare a spazio allocato.

    E comunque, cosa c'entra questo con il problema iniziale della lettura del file?
    Grazie delle dritte e del consiglio.
    In effetti ho cambiato argomento, scusate.
    Il mio problema con i file è che non ho ben capito cosa accade quando ci lavoriamo, ad esempio, già lo scandire del testo; ogni chiamata di letto/scrittura si spasta di uno un "cursore" sul testo?. Spero di essre stato chiaro

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    No, il tuo problema sono i puntatori (come per tanti altri). Non hai compreso che un puntatore non basta ma è necessario lo spazio a cui punta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.