Probleme dans mon programme password

Résolu
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 6 déc. 2004 à 12:12
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 6 déc. 2004 à 15:18
Salut tout le monde,

Voilà j'ai un problème dans mon programme de password. Je m'explique: J'ai développé en premier lieu un programme où l'utilisateur choisit son mot de passe, celui ci est crypté et sauvegardé dans un fichier. Jusque là c'est bon. Par contre dans mon programme de protection ca plante. Le programme protection crypte le mot de passe entré par l'utilisateur et le compare à la chaîne de caractères du fichier crypté.
Le problème c'est que mon programme ne s'arrête pas de boucler même si je rentre le bon mot de passe. J'ai certainement dû faire une erreur mais je ne sais pas laquelle. J'ai mis la source de mon prog ci-dessous. J'espère que quelqu'un pourra m'aider. Encore merci.

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

#define LONG_MOT 100
#define LONG_CLE 100

void CESAR(char *, int cle);

int main(int argc, char *argv[])
{

char pass[LONG_MOT];
char *str;

int cle;
FILE *fichier;
fichier=fopen("password.txt","r");

cle=15;

do {
fscanf(fichier,"%s",&str); /* recupere la chaine de caractères ds fichier
et on la stock dans str */
fclose(fichier); /* On ferme fichier */

printf("\nEnter Password:");
scanf("%s",&pass); /* Saisie utilisateur */
CESAR(pass,cle); /* On appel Cesar pour crypter la saisie */
}
while(str!=pass);
return 0;
}
void CESAR(char *mot, int cle) /* ---- DEFINITION Fonction Cesar ---- */
{
int i, n;
for (i=0;i<strlen(mot)-1;i++)
{
mot[i] = tolower(mot[i]); /* ---- CONVERSION en minuscule au cas où ---- */
if (mot[i] != 32) /* ---- CHIFFREMENT des caracteres autres que ESPACE ---- */
{
n = mot[i]+cle; /* ---- CONVERSION du Char mot[i] en Int ---- */
if (n<=122) /* ---- CHIFFREMENT de mot[]---- */
{
mot[i] = n; /* ---- AFFECTATION de Int n dans Char mot[i] ---- */
}
else
{
n = n - 26;
mot[i] = n; /* ---- AFFECTATION de Int n dans Char mot[i] ---- */
}
}
else /* ---- CHIFFREMENT de ESPACE en ESPACE ---- */
{
mot[i] = 32;
}
}
mot[strlen(mot)-1] = 0; /* ---- AFFECTATION ('\0') (NULL) (Code 0) en fin de chaine ---- */
}

/*password.txt contient la chaîne de caractères suivantes:
?@ABCDpq */

Jarod_Delaware

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 déc. 2004 à 12:46
fscanf(fichier,"%s",&str);
Tu ecris sur un pointeur qui ne pointe nulle part.

ciao...
BruNews, MVP VC++
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 déc. 2004 à 13:59
Salut,
C'est vrai, tu as declaré le pointeur str sans lui allouer de l'espace. Tu peux remplacer char *str par char str[100]. Voila c'est tout.
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 déc. 2004 à 15:04
while(str!=pass);

pour comparer des chaînes de caractères c'est strcmp, là tu compare des pointeurs sur des chaînes qui sont forcément différent
3
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
6 déc. 2004 à 14:28
Salut,
C'est ce que j'ai fais. J'ai remplacé char *str par char str[100] mais ca ne resouds pas le problème.
Jarod_Delaware
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
6 déc. 2004 à 15:18
Merci à tout le mone pour votre aide. Effectivement en utilisant strcmp il n'y a plus de problèmes.
Jarod_Delaware
0
Rejoignez-nous