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 -
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.
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
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!
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!
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,