Chaine de caractère

Bonjour,

Voici mon programme :

int modifier() {

int i;
char *mot;
char *mot2="un";

printf("Entrer un mot\n");
scanf ("%s", &mot);

if (&mot == mot2) printf("vrai");

printf("%s\n", mot2);
printf("%s", &mot);

return 0;

}

Je demande à l'utilisateur de rentrer un mot que je met dans mot et ensuite, je le compare à mot2 pour savoir si c'est les même. Or, lorsque l'utilisateur rentre le mot "un" et qu'ensuite je le compare, il me dit que ce n'est pas les mêmes. Mais quand j'affiche les 2 mots, ils sont pareils.
Donc j'aimerais bien comprendre pourquoi il me dit qu'ils sont différents.
Merci d'avance.
Et je code sur CodeBlocks.

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. C'est parce que tu ne compares pas les chaines de caractères mais les pointeurs.

    Pour comparer les chaines, il faut utiliser strcmp( mot, mot2 ).
    1. Bonjour

      De plus, ton pointeur mot n'étant pas initialisé, il y a très gros à parier que ça plante quand tu exécutes
      scanf ("%s", &mot);
      si tu rentres plus de quelques caractères.
      Car tu utilises en fait ton pointeur comme un buffer, mais sa taille reste celle du pointeur.
      1. Voila le programme correct :

        int modifier() {

        int i;
        char mot1[50];
        char *mot2="un";

        printf("Entrer un mot\n");
        scanf ("%49s", mot1);

        if (strcmp(mot1, mot2) == 0) printf("Les deux mots sont égaux\n");

        printf("Mot saisi -> '%s', et mot comparé -> '%s'\n", mot1,mot2);
        return 0;

        }