Problème en C

Fermé
antou08 Messages postés 118 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 16 avril 2012 - 30 nov. 2010 à 16:23
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 - 30 nov. 2010 à 20:43
Bonjour,
J'ai un probleme sur un programme codé en C. Le compilateur me retourne 1 erreur a la ligne 30.

Le code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

#define TAILLE_MAX 1000

int lire(char *chaine, int longueur);

int main()
{

typedef BOOL (WINAPI *PFONCTION) (HANDLE,DWORD,PCOORD);
HMODULE hDLL=LoadLibrary("kernel32.dll");
PFONCTION SetDisplayMode = (PFONCTION) GetProcAddress(hDLL,"SetConsoleDisplayMode");
HANDLE hconsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
SetDisplayMode (hconsole,1,&coord);

int i = 1;

FILE* fichier = NULL;
char mdp[TAILLE_MAX] = "";
char mdpAdmin[TAILLE_MAX] = "";

fichier = fopen("mdp.txt", "r");

if (fichier != NULL)
{
fscanf(fichier, "%s\n%s", &mdp, &mdpAdmin); // L'erreur vient de cette ligne
fclose(fichier);
printf("Ouverture du fichier reussi\n");
}

else
{
printf("Erreur d'ouverture du fichier !\n");
system("PAUSE");
i = 0;
}


while(i)
{

char mdpEntre[TAILLE_MAX] = "";

lire(mdpEntre, 1000);

if (strcmp(mdp, mdpEntre) == 0)
{
i = 0;
}
else
{
i = 1;
}


if (strcmp(mdpAdmin, mdpEntre) == 0)
{

}
else
{

}
}

return 0;
}


int lire(char *chaine, int longueur)
{
char *positionEntree = NULL;

if (fgets(chaine, longueur, stdin) != NULL)
{
positionEntree = strchr(chaine, '\n');
if (positionEntree != NULL)
{
*positionEntree = '\0';
}
return 1;
}
else
{
return 0;
}
}



Message du compilateur :

Compiling: main.c
C:\documents\c\block\main.c: In function 'main':
C:\documents\c\block\main.c:30: warning: format '%s' expects type 'char *', but argument 3 has type 'char (*)[1000]'
C:\documents\c\block\main.c:30: warning: format '%s' expects type 'char *', but argument 4 has type 'char (*)[1000]'
Linking console executable: bin\Debug\block.exe
Output size is 38,91 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 2 warnings



Merci d'avance.

2 réponses

lucieb31 Messages postés 345 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62
30 nov. 2010 à 18:27
Enleve les & de ton fscanf, tu en as pas besoin car un char[] est deja un pointeur.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 nov. 2010 à 20:07
char[] est deja un pointeur.
Non, char [] est un tableau et un tableau n'est pas un pointeur. La raison est que le compilateur transforme le tableau en l'adresse sur le premier élément du tableau dans le contexte de passage d'arguments.
Cdlt,
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
30 nov. 2010 à 20:29
Je crois que lucisb31 a tout de même la bonne solution (Je sais pas si tu as essayé?)

Je suis d'accord qu'un char[] n'est pas un pointeur mais dans ce contexte, si ma mémoire est bonne, le nom du tableau sans parenthèses carrées (j'oublie le nom), se comporte comme l'adresse du tableau.

Au pire, tente le coup et si ça ne résout pas le problème, tu nous auras appris quelque chose!

Bonne chance!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 nov. 2010 à 20:38
Oui, c'est la bonne solution. Et je n'ai pas dit le contraire ^^.

dans ce contexte, si ma mémoire est bonne, le nom du tableau sans parenthèses carrées (j'oublie le nom), se comporte comme l'adresse du tableau.
Oui, c'est exactement ce que j'ai dit ;-))).
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
30 nov. 2010 à 20:43
Haha, désolé. J'ai cru que tu étais l'auteur de la discussion ce qui faisait que ta réponse semblait être en désacord avec la réponse de lucieb.

Je suppose que mon cerveau commence à fatiguer en cette fin de journée!
Bonne journée!
0