web-dev-qa-db-fra.com

C - Comparaison du littéral de chaîne avec le tableau de caractères

Je suis nouveau sur C et je ne comprends toujours pas comment utiliser des chaînes de caractères via des tableaux de caractères.

Dans mon programme C, j'accepte les commandes de l'utilisateur:

char command[20];
scanf("%s",command);

Bien sûr, je veux ensuite savoir quelle commande ils ont tapée (quelque chose de similaire à "if (command ==" hello "), alors faites quelque chose"). Je sais que ce n'est pas possible en C, car je compare un littéral de chaîne à un tableau de caractères, mais quel serait le bon moyen d'y parvenir? J'ai essayé d'utiliser strcmp (commande, "hello") et j'ai toujours des erreurs.

Tout conseil que vous pourriez donner serait très apprécié. Je vous remercie!

5
Irina

strcmp renvoie 0 lorsque les chaînes sont identiques. J'ai un code qui utilise strcmp comparant des tableaux de caractères à des chaînes de caractères, et j'étais assez confus quand cela ne fonctionnait pas. Il s’est avéré que j’avais tort de supposer qu’il renverrait 1 lorsque la chaîne est identique! 

Peut-être que vous avez fait la même erreur? 

5
gravitas

J'ai écrit une version complète de ce que je pense que vous essayez de faire:

    #include <string.h>
    void main()
    {

       char command[20];
       scanf("%s",command);

       // command and "hello" can be less than, equal or greater than!
       // thus, strcmp return 3 possible values
       if (strcmp(command, "hello") == 0)
       {
          printf("\nThe user said hello!");
       }

    }

Plusieurs personnes ont commenté l'utilisation de scanf et elles sont correctes, sauf qu'un nouveau programmeur doit commencer quelque part à apprendre ce genre de choses, alors ne vous en faites pas, nous apprenons tous ...

J'espère que cela t'aides.

4
JackCColeman

Je pense que c'est un point de départ idéal pour vous:

http://www.wikihow.com/Compare-Two-Strings-in-C-Programming

C'est probablement écrit au bon niveau pour vous. Bonne chance et bienvenue chez stackoverflow!

1
spartygw

Quand on parle de chaîne en C, elle prend normalement deux formes: 1. un tableau de caractères, 2. un pointeur de caractère. La plupart du temps, ils sont interchangeables. Par exemple:

char *cmd_ptr = "command1";
char cmd_array[20] = "command2";
printf ("cmd1: %s cmd2: %s\n", cmd_ptr, cmd_array);

La différence principale entre la définition ci-dessus est que pour cmd_ptr vous ne pouvez pas changer son contenu, comme cmd_ptr[0] = 'a'; pour cmd_array vous pouvez changer n'importe quel élément du tableau.

Mais vous pouvez faire cmd_ptr = cmd_array;, puis vous pouvez apporter des modifications via cmd_ptr car il pointe au même emplacement que cmd_array.

0
qunying