Passer 2 chaînes d’entrée à comparer

Je teste un petit programme qui compare fondamentalement si 2 chaînes d’entrée sont identiques (comme le fait strcmp).

Je voudrais faire quelque chose comme (les utilisateurs tapent 2 chaînes désirées sur la même ligne). Dans ce cas, il devrait retourner “Les deux chaînes sont différentes”

./a.out foo bar 

dois-je faire cela pour lire les chaînes d’entrée de l’utilisateur?

  scanf("%s %s", str1, str2); 

ou

 gets(str1); gets(str2); 

Voici ce que j’ai jusqu’à présent (il semble s’enliser dans une boucle infinie pour certaines raisons)

 int mystrcmp(char str1[], char str2[]) { int i = 0; while (str1[i] == str2[i]) { if (str1[i] == '\0' || str2[i] == '\0') break; i++; } if (str1[i] == '\0' && str2[i] == '\0') return 0; else return -1; } int main(int argc, char * * argv) { int cmp; char str1[1000], str2[1000]; scanf("%s %s", str1, str2); //gets(str1); gets(str2); cmp = mystrcmp(str1, str2); if (cmp == 0) printf("The two ssortingngs are identical.\n"); else printf("The two ssortingngs are different.\n"); return 0; } 

Cette solution devrait fonctionner:

 #include  #include  int main(int argc, char *argv[]) { if(argc != 3) { puts("Wrong number of arguments"); return 0; } if(strcmp(argv[1], argv[2])) puts("The two ssortingngs are different."); else puts("The two ssortingngs are identical."); } 

Vous devriez faire ni l’un ni l’autre. Au lieu de cela, je vous suggère d’apprendre comment les arguments de ligne de commande sont passés à la fonction main via les arguments argc et argv .

Je vous suggère d’essayer ce programme pour vous aider à comprendre:

 #include  int main(int argc, char *argv[]) { printf("argc = %d\n", argc); for (int a = 0; a < argc; ++a) printf("argv[%d] = \"%s\"\n", a, argv[a]); } 

Pour votre exemple d'invocation

 ./a.out foo bar 

le programme ci-dessus imprimera

 argc = 3 argv[0] = "./a.out" argv[1] = "foo" argv[2] = "bar"