Problème en C

antou08 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   -  
Doctor C Messages postés 627 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   62
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   399
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   399
 
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