Visualizzazione dei risultati da 1 a 9 su 9

Discussione: segmentation fault

  1. #1

    segmentation fault

    salve ho il seguente pezzo di codice da proporvi:
    FILE *fileIn;
    char stringa;

    fileIn=fopen("ciccio.tr","r");
    if(fileIn == NULL){
    printf("Errore nell'apertura del file.\n");
    exit(-1);
    }

    if (fileIn){
    while(!feof(fileIn)){
    if (stringa == 82) // ASCII R
    {funz1(addres);}
    else
    {funz2(addres, 0);}
    // printf("%08X - %c\n", addres, stringa);
    fscanf(fileIn, "%08X %s", &addres, &stringa);
    }
    fclose(fileIn);
    }
    else
    {
    printf("\n Errore durante l'apertura del file");
    }

    il file contiene circa 20010 righe, quando arrivo quasi in fondo al file mi arriva un bellissimo segmentation fault
    compilo con gcc -Wall -o prova prova1.c

    qlc mi sa dire come mai? dove sbaglio?

    grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mi meraviglia il fatto che non succeda subito ...

    Non puoi dichiarare una variabile come singolo char

    char stringa;

    e poi utilizzarlo come fosse una stringa

    fscanf(fileIn, "%08X %s", &addres, &stringa);

    E' ovvio che avrai un errore ...

    Una stringa e' un vettore di caratteri, in numero adeguato alla lunghezza della stringa letta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    come minimo in:
    codice:
    char stringa;
    ...
    fscanf(fileIn, "%08X %s", &addres, &stringa);
    in cui stringa non è una stringa ma un carattere.

  4. #4
    la lettura del file è corretta, cioè,
    char stringa , stringa conterrà un singolo carattere, per cui non da errore,
    controllando meglio, noto che viene letto due volte l'ultima riga.

  5. #5
    Originariamente inviato da gigiachiara
    char stringa , stringa conterrà un singolo carattere, per cui non da errore
    Un carattere ed un stringa lunga un carattere sono due cose distinte.
    se vuoi leggere un carattere devi:
    codice:
    char aChar;
    fscanf(fileIn, "%c", &aChar);
    se vuoi leggere una stringa lunga un carattere devi almeno:
    codice:
    char stringhetta[2];
    fscanf(fileIn, "%s", stringhetta);
    ma attento che se la stringa di input e' piu' lunga di un carattere allora sei di nuovo in crash.

  6. #6
    grazie problema risolto, era la cattiva lettera del carattere era un char e non una stringa lunga un carattere xchè infatti una stringa lunga un carattere contiene alla fine \0 giusto?

    grazie mille

  7. #7
    grazie problema risolto, era la cattiva lettera del carattere era un char e non una stringa lunga un carattere xchè infatti una stringa lunga un carattere contiene alla fine \0 giusto?

    grazie mille

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì ... ma cos'e' la "cattiva lettera"?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    avevo definito

    char stringa

    ma nella fscanf(fileIn, "%08X %s ", &addres, &stringa);
    inserivo s e non c di char

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.