Ifn scanf, getchar, et C

Fermé
Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011 - 25 avril 2009 à 01:40
Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011 - 26 avril 2009 à 15:53
Bonjour,

je voudrai faire une petite appli pour exectuer deux trois commande, mais seulement la protéger en apparence, pour qu'elle ne soient pas activable par tout le monde

donc en fait je voudrai bien un truc du style

if (mdp=="annhydrium")
{ faire si faire ca

}else{

otroment faire ca

}


or je n'arrive pas a avoir ma chaine de caractère complète et a la tester...

Merci d'avance...

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2009 à 01:54
Salut,
En C pour comparer des chaînes on utilise strcmp.
Essais :
char mdp[64];
printf("Mot de passe : ");
if(fgets(mdp,sizeof mdp,stdin)!=NULL) {
    char *p=strchr(mdp,'\n');
    if(p!=NULL) 
        *p='\0';
    else {
        int c;
        while( (c=getchar())!='\n' && c!=EOF );
    }
    
    if(strcmp(mpd,"tonMotDePasse")==0)
           puts("bingo");
    else
           puts("mauvais mot de passe");
   
}

Par contre ce code a plusieurs défauts. Sans compter qu'il vaut mieux ne pas utiliser l'opérateur strcmp pour la comparaison de mots de passe (il vaut mieux comparer tous les caractères), il est important de noter que la chaîne "tonMotDePasse" sera stocké en clair dans ton programme une fois compilé.
Mais tu peux la stocker sous forme chiffrée et déchiffrée à la volée en utilisant un xor.
Si tu veux plus de détails, n'hésite pas.

Cdlt
0
Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011 257
26 avril 2009 à 10:31
Il y a une erreur quelque part ou c'est moi car je n'arrive pas a compilé or la variable mdp est bien déclarée...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011
26 avril 2009 à 11:19
J'ai inversé à un moment mdp avec mpd. T'aurais pu le voir...
#include <stdio.h>
#include <string.h>

int main(void){
    char mdp[64];
    printf("Mot de passe : ");
    if(fgets(mdp,sizeof mdp,stdin)!=NULL) {
        char *p=strchr(mdp,'\n');
        if(p!=NULL)
            *p='\0';
        else {
            int c;
            while( (c=getchar())!='\n' && c!=EOF );
        }

        if(strcmp(mdp,"tonMotDePasse")==0)
            puts("bingo");
        else
            puts("mauvais mot de passe");

    }
    return 0;
}

0
Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011 257 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
26 avril 2009 à 15:53
aaahhh bon je teste tout a l'heure
0
quendistu Messages postés 509 Date d'inscription lundi 3 novembre 2008 Statut Membre Dernière intervention 4 juin 2009 87
25 avril 2009 à 01:55
#include <string.h>

int main(int argc,char **argv, car **envp)
{
if (argc <2) return(-1);

if (strcmp(argv[1],"annhydrium")==0)
{
faire si;
faire ca;
}

else
{
otroment faire ca
}

return (0);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2009 à 02:12
Salut,

int main(int argc,char **argv, car **envp)
Prototype non standard (deux arguments maximum).

if (argc <2) return(-1);
Comportement indéfini. Il faut mettre return EXIT_FAILURE;

Cdlt
0
Annhydrium Messages postés 1781 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 3 mars 2011 257
26 avril 2009 à 00:46
ok je teste vos différente réponse dès que j'ai le temps merci...
0