Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Segmentation fault: 11 a cosa è legato?
Forum - C/C++ - Segmentation fault: 11 a cosa è legato?

Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 13:11
Lunedì, 22/06/2015
Devo fare un programma che legge da un file un testo e stampi a video la parola che si ripete più volte:
non so a quanto sia lungo il file, e non so quante parole ci sono nel testo al massimo ci sono 5000 parole diverse;

penso che il problema sia legato a char *str ma non saprei come fare per leggere un intera stringa di lunghezza ingota

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7.     char parola[21];
  8.     int count;
  9. }Parola;
  10.  
  11. int main(int argc, char const *argv[])
  12. {
  13.     FILE *testo;
  14.     Parola p[5000];
  15.     int i,j,count, max_i, max_n;
  16.     char *str;
  17.     char parola[21];
  18.    
  19.     testo = fopen("fiaba.txt","r");
  20.     if (!testo) exit(-1);
  21.     i=count=0;
  22.    
  23.     while (fscanf(testo,"%s", str)!=EOF){
  24.         while(sscanf(str,"%s", parola)!='\n'){
  25.             if (i == 0){
  26.                 strcpy(p[i].parola, parola);
  27.                 p[i].count = 0;
  28.             } else {
  29.                 for (j=0;j<i;j++){
  30.                     if (strcmp(p[j].parola, parola) == 0){
  31.                         p[j].count += 1;
  32.                     } else {
  33.                         count += 1;
  34.                     }
  35.                 }
  36.                 if (count == i){
  37.                     strcpy(p[i].parola, parola);
  38.                     p[i].count = 0;
  39.                 }
  40.             }
  41.             i++;
  42.         }
  43.     }
  44.     fclose(testo);
  45.     max_i=max_n=0;
  46.     for (j=0; j<i;j++){
  47.         if ( p[j].count > max_n ){
  48.             max_n = p[j].count;
  49.             max_i = j;
  50.         }
  51.     }
  52.    
  53.     printf("Parola più ripetuta %s n.volte : %d \n", p[max_i].parola, p[max_i].count );
  54.    
  55.     return 0;
  56. }


Ultima modifica effettuata da lorenzoscarrone il 22/06/2015 alle 13:22
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:34
Lunedì, 22/06/2015
Non ho capito "11" nel titolo .. che vuol dire?

Comunque il problema è nel puntatore str. Non hai allocato nessuno spazio e usandolo hai un crash.

Ultima modifica effettuata da nessuno il 22/06/2015 alle 13:42


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote