Forum - C/C++
- Warning su fscanf
morcomucchia (Normal User)
Newbie
Messaggi: 9
Iscritto: 28/07/2010
ciao io ho questo codice....
Codice sorgente - presumibilmente C
#include <stdio.h>
#include <stdlib.h>
#define kFileDaLeggere "input.txt"
#define kFileDaScrivere "output.txt"
#define kLunghezzaMaxStringa 100
#define kErroreIO -1
#define kErroreMemoria -2
#define kNessunErrore 0
double numero1, numero2, numero3;
char * stringa;
int main ( void ) ;
int LeggiDaFile( void ) ;
int ScriviSuFile( void ) ;
int main ( void )
{
int errore;
errore= LeggiDaFile( ) ;
if ( errore)
return errore;
errore= ScriviSuFile( ) ;
if ( errore)
return errore;
return kNessunErrore;
}
int LeggiDaFile( void )
{
FILE * ingresso;
printf ( "Lettura dal file %s\n " , kFileDaLeggere
) ; ingresso= fopen( kFileDaLeggere, "r" ) ;
if ( ingresso== NULL)
return kErroreIO;
stringa= calloc( kLunghezzaMaxStringa, sizeof ( char ) ) ;
if ( stringa== NULL)
return kErroreMemoria;
fscanf( ingresso, "%lg %lg %lg %s" ,& numero1,& numero2,& numero3, stringa) ;
printf ( "Numero 1: %g\n Numero 2: %g\n Numero 3: %g\n Stringa: %s\n " , numero1
, numero2
, numero3
, stringa
) ; fclose( ingresso) ;
return kNessunErrore;
}
int ScriviSuFile( void )
{
FILE * uscita;
printf ( "Scrittura sul file %s\n " , kFileDaScrivere
) ; uscita= fopen( kFileDaScrivere, "w" ) ;
if ( uscita== NULL)
return kErroreIO;
fprintf( uscita, "%g %g %g %s\n " , numero1, numero2, numero3, stringa) ;
printf ( "Ora puoi aprire il file %s e verificare che contenga una copia di %s\n " , kFileDaScrivere
, kFileDaLeggere
) ; return kNessunErrore;
}
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
qualcuno (Ex-Member)
Rookie
Messaggi: 37
Iscritto: 30/06/2010
La prossima volta dai un titolo più significativo al thread...
Matthew (Member )
Expert
Messaggi: 387
Iscritto: 29/01/2007
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.
Postato originariamente da morcomucchia :
Codice sorgente - presumibilmente Plain Text
stringa=calloc(kLunghezzaMaxStringa,sizeof(char));
Codice sorgente - presumibilmente Plain Text
stringa=(char *)calloc(kLunghezzaMaxStringa,sizeof(char));
Ultima modifica effettuata da Matthew il 18/08/2010 alle 8:06
lumo (Member )
Expert
Messaggi: 449
Iscritto: 18/04/2010
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.
Postato originariamente da morcomucchia :
Codice sorgente - presumibilmente Plain Text
stringa=calloc(kLunghezzaMaxStringa,sizeof(char));
Codice sorgente - presumibilmente Plain Text
stringa=(char *)calloc(kLunghezzaMaxStringa,sizeof(char));
il cast viene fatto implicitamente dal compilatore, è invece necessario metterlo in C++
Cesco90 (Ex-Member)
Rookie
Messaggi: 29
Iscritto: 18/05/2009
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 )