Pasando 2 cadenas de entrada para comparar

Estoy probando un pequeño progtwig que básicamente compara si 2 cadenas de entrada son idénticas (como lo hace strcmp).

Me gustaría hacer algo como (los usuarios escriben 2 cadenas deseadas en la misma línea). En este caso debería devolver “Las dos cadenas son diferentes”.

./a.out foo bar 

¿Debo hacer esto para leer las cadenas de entrada del usuario?

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

o

 gets(str1); gets(str2); 

Esto es lo que tengo hasta ahora (parece estar atrapado en un bucle infinito por algunas razones)

 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 strings are identical.\n"); else printf("The two strings are different.\n"); return 0; } 

Esta solución debería funcionar:

 #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 strings are different."); else puts("The two strings are identical."); } 

Usted no debe hacer nada. En su lugar, le sugiero que aprenda cómo se pasan los argumentos de la línea de comandos a la función main través de los argumentos argc y argv .

Le sugiero que pruebe este progtwig para ayudar a su comprensión:

 #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]); } 

Para tu ejemplo de invocación.

 ./a.out foo bar 

el progtwig de arriba se imprimirá

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