Probleme avec fscanf et pointeurs...en C

andreiudinca Messages postés 3 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 19 avril 2010 - 19 avril 2010 à 04:20
andreiudinca Messages postés 3 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 19 avril 2010 - 19 avril 2010 à 14:55
Mon problème est le suivant:

J'essaye de faire un programme qui est un peu compliqué...Mais la petite partie qui ne fonctione pas est suposément simple. Le warning que j'ai est le suivante : format argument is not a pointer (arg 3). Je met une partie du code pour que vous voyez...


/*Alors j'ai une struct qui est definie dans un fichier .h
  En fait c'est une typedef struct*/

typedef struct 
{
 // Champs de l'en-tête d'un fichier image
   char ch[TAILLE_CHAINE];		// 1ère chaîne du fichier image
   int nbColonnes;			// nombre de colonnes de l'image du
                                        // fichier image
   int nbLignes;			// nombre de lignes de 
                                        // l'image du fichier image
   int max;				// valeur maximale des intensités 
                                        // dans les trois canaux (RGB)   
} EnTete;


typedef struct 
{
   // Une image 	 
   EnTete lEnTete;				// l'en-tête du fichier 
   Pixel tabPixels[MAX_PIXELS];	// les pixels 
} Image;

// Le code qui précéde se trouve dans un fichier .h

// Le code qui suit est dans un fichier .c dans lequel j'appele une 
// une fonction qui utilise le type Image sur un pointeur.

void lectureImage(char * entree,  Image * imageOri, int * err)
{
//...

// les trois prochaines lignes donne l'erreur suivante
//format argument is not a pointer (arg 3)

fscanf(f,"%i", imageOri->lEnTete.nbColonnes); 
fscanf(f,"%i", imageOri->lEnTete.nbLignes);
fscanf(f,"%i", imageOri->lEnTete.max);



Avant les trois lignes j'ai un autre fscanf pour imageOri->lEnTete.ch. Elle ne donne aucun Warning. Ou pensez-vous qu'est le problème?
Le imageOri est defini comme un pointeur, alors je ne comprend pas pourquoi le warning. De plus avec l'autre partie de la struct le lEnTere.ch il n'y a aucun problème?!?!?!

4 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
19 avril 2010 à 09:50
salut,

en effet, étrange !!
mis à part le warning, est ce que ton fichier est bien rempli ?

Sinon, personellement, pour les traitements sur les fichiers, je préfère utiliser fread/fwrite.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 avril 2010 à 10:23
Peut être comme ceci:
fscanf(f,"%i", &imageOri->lEnTete.nbColonnes);
fscanf(f,"%i", &imageOri->lEnTete.nbLignes);
fscanf(f,"%i", &imageOri->lEnTete.max);

pour imageOri->lEnTete.ch. Elle ne donne aucun Warning.

Normal, ch est un tableau, donc un pointeur, ce qui n'était pas le cas des trois précédent ;)

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
19 avril 2010 à 12:07
ah oui !!
Voilà pourquoi je n'utilise pas fscanf.
0
andreiudinca Messages postés 3 Date d'inscription samedi 6 mars 2010 Statut Membre Dernière intervention 19 avril 2010
19 avril 2010 à 14:55
Merci beaucoup pour vos rèponses. Finalement cptPingu avait raison il falait mettre &. La je comprend. Merci encore une fois.
0
Rejoignez-nous