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++ - Warning su fscanf
Forum - C/C++ - Warning su fscanf

Avatar
morcomucchia (Normal User)
Newbie


Messaggi: 9
Iscritto: 28/07/2010

Segnala al moderatore
Postato alle 14:55
Lunedì, 16/08/2010
ciao io ho questo codice....
Codice sorgente - presumibilmente C

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define kFileDaLeggere          "input.txt"
  5. #define kFileDaScrivere         "output.txt"
  6. #define kLunghezzaMaxStringa    100
  7.  
  8. #define kErroreIO               -1
  9. #define kErroreMemoria          -2
  10. #define kNessunErrore           0
  11.  
  12. double      numero1,numero2,numero3;
  13. char        *stringa;
  14.  
  15. int main (void);
  16. int LeggiDaFile(void);
  17. int ScriviSuFile(void);
  18.  
  19. int main (void)
  20. {
  21.     int         errore;
  22.    
  23.     errore=LeggiDaFile();
  24.     if(errore)
  25.         return errore;
  26.     errore=ScriviSuFile();
  27.     if(errore)
  28.         return errore;
  29.    
  30.     return kNessunErrore;
  31. }
  32.  
  33. int LeggiDaFile(void)
  34. {
  35.     FILE        *ingresso;
  36.    
  37.     printf("Lettura dal file %s\n",kFileDaLeggere);
  38.     ingresso=fopen(kFileDaLeggere,"r");
  39.     if(ingresso==NULL)
  40.         return kErroreIO;
  41.     stringa=calloc(kLunghezzaMaxStringa,sizeof(char));
  42.     if(stringa==NULL)
  43.         return kErroreMemoria;
  44.     fscanf(ingresso,"%lg %lg %lg %s",&numero1,&numero2,&numero3,stringa);
  45.     printf("Numero 1: %g\nNumero 2: %g\nNumero 3: %g\nStringa: %s\n",numero1,numero2,numero3,stringa);
  46.     printf("\n");
  47.     fclose(ingresso);
  48.    
  49.     return kNessunErrore;
  50. }
  51.  
  52. int ScriviSuFile(void)
  53. {
  54.     FILE        *uscita;
  55.    
  56.     printf("Scrittura sul file %s\n",kFileDaScrivere);
  57.     uscita=fopen(kFileDaScrivere,"w");
  58.     if(uscita==NULL)
  59.         return kErroreIO;
  60.     fprintf(uscita,"%g %g %g %s\n",numero1,numero2,numero3,stringa);
  61.     printf("Ora puoi aprire il file %s e verificare che contenga una copia di %s\n",kFileDaScrivere,kFileDaLeggere);
  62.     printf("\n");
  63.     return kNessunErrore;
  64. }



ma quando compilo ho il seguente problema...
nuovo.c: In function ‘LeggiDaFile’:
nuovo.c:44: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_resul

da cosa dipende???

Ultima modifica effettuata da qualcuno il 16/08/2010 alle 17:39
PM Quote
Avatar
qualcuno (Ex-Member)
Rookie


Messaggi: 37
Iscritto: 30/06/2010

Segnala al moderatore
Postato alle 17:40
Lunedì, 16/08/2010
La prossima volta dai un titolo più significativo al thread...

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 8:04
Mercoledì, 18/08/2010
La funzione fscanf restituisce un integer, indicando l'esito dell'operazione.
Il compilatore ti dice solo che stai ignorando il valore di ritorno.

Mi sembra però più importante fare il cast del puntatore restituito dalla calloc.


Testo quotato

Postato originariamente da morcomucchia:
Codice sorgente - presumibilmente Plain Text

  1. stringa=calloc(kLunghezzaMaxStringa,sizeof(char));





Codice sorgente - presumibilmente Plain Text

  1. stringa=(char *)calloc(kLunghezzaMaxStringa,sizeof(char));


Ultima modifica effettuata da Matthew il 18/08/2010 alle 8:06
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 11:30
Sabato, 21/08/2010
Testo quotato

Postato originariamente da Matthew:

La funzione fscanf restituisce un integer, indicando l'esito dell'operazione.
Il compilatore ti dice solo che stai ignorando il valore di ritorno.

Mi sembra però più importante fare il cast del puntatore restituito dalla calloc.


Testo quotato

Postato originariamente da morcomucchia:
Codice sorgente - presumibilmente Plain Text

  1. stringa=calloc(kLunghezzaMaxStringa,sizeof(char));





Codice sorgente - presumibilmente Plain Text

  1. stringa=(char *)calloc(kLunghezzaMaxStringa,sizeof(char));



il cast viene fatto implicitamente dal compilatore, è invece necessario metterlo in C++

PM Quote
Avatar
Cesco90 (Ex-Member)
Rookie


Messaggi: 29
Iscritto: 18/05/2009

Segnala al moderatore
Postato alle 23:44
Domenica, 22/08/2010
Ciao

1) Ti sei dimenticato la free di stringa!
2) con che compilatore compili, io ho provato con gcc ma non mi da nessun warning neanche ( con -pedantic oppure -Wall come parametri )

PM Quote