Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema Warning
Forum - C/C++ - Problema Warning

Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 10:28
Giovedì, 04/07/2013
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. #define MAXDIM 10
  4.  
  5. typedef struct{
  6.         float elemento[MAXDIM];
  7.         int n;
  8. } lista;
  9.  
  10. void acquisisciNome(char* pnomeFile[20]);
  11. void carica(lista* pl, char nomeFile[20]);
  12.  
  13. int main(){
  14.         char nomeFile[20];
  15.         lista l;
  16.         acquisisciNome(&nomeFile);//**Warning**
  17.         carica(&l, nomeFile);
  18.         return 0;
  19. }
  20.  
  21. void acquisisciNome(char* pnomeFile[20]){
  22.         printf("Inserisci nome del file: ");
  23.         scanf("%s",&(*pnomeFile));
  24.         return;
  25. }
  26.  
  27. void carica(lista* pl, char nomeFile[20]){
  28.         int i;
  29.         FILE* carica;
  30.                 carica = fopen(nomeFile, "r");
  31.                 for(i = 0; i < pl->n; i++){
  32.                         scanf(carica, "%f", pl->elemento[i]);//**Warning**
  33.                 }
  34.         fclose(carica);
  35.         return;
  36. }



"Warning : Suspicious pointer conversion ..."

Mi da due warning in compilazione e non riesco a risolverli... Ho provato con un cast ma niente, sapreste indirizzarmi sul come modificare le due righe in questione?

Ultima modifica effettuata da Afa il 04/07/2013 alle 10:29


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 10:41
Giovedì, 04/07/2013
Nella dichiarazione della funzione acquisisciNome (che causa il primo warning):
Codice sorgente - presumibilmente C/C++

  1. char *pnomeFile[20]

è un array di puntatori, non un puntatore a un array. Il tipo corretto è
Codice sorgente - presumibilmente C/C++

  1. char (*pnomeFile)[20]



Nel secondo warning:
Codice sorgente - presumibilmente Plain Text

  1. pl->elemento[i]

è un float, perché -> dereferenzia, non un puntatore, va messo il & all'inizio

Ultima modifica effettuata da ZioCrocifisso il 04/07/2013 alle 10:46


PM Quote
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 11:03
Giovedì, 04/07/2013
Per il primo warning hai ragione, ho corretto ed è ok

Per il secondo no, perchè so che nello scanf va la & ma in questo caso il passaggio e' per riferimento... ho provato comunque il tuo metodo e mi da addirittura un errore!


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 11:56
Giovedì, 04/07/2013
No ok risolto, ho scritto scanf invece di Fscanf
Si può chiudere :)


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 12:08
Giovedì, 04/07/2013
Il passaggio con -> non è per riferimento, perché -> dereferenzia, è come fare (*struttura).campo.


PM Quote
Avatar
Afa (Normal User)
Rookie


Messaggi: 29
Iscritto: 17/06/2013

Segnala al moderatore
Postato alle 15:04
Giovedì, 04/07/2013
Ok ho capito ora a che ti riferisci, cmq ho risolto, il programma gira!
Grazie dell'aiuto!:k:


"Il programmatore e' qualcuno che corregge errori che non sai di avere in un modo che non puoi capire"
PM Quote