传递2个输入字符串进行比较

我正在测试一个小程序,它基本上比较了2个输入字符串是否相同(就像strcmp那样)。

我想做类似的事情(用户在同一行上输入2个所需的字符串)。 在这种情况下,它应该返回“两个字符串是不同的”

./a.out foo bar 

我应该这样做来读取用户的输入字符串吗?

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

要么

 gets(str1); gets(str2); 

这是我到目前为止(由于某些原因似乎陷入无限循环)

 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; } 

该解决方案应该有效:

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

你不应该这样做。 相反,我建议您了解命令行参数如何通过argcargv参数传递给main函数。

我建议你尝试这个程序来帮助你理解:

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

对于您的示例调用

 ./a.out foo bar 

上面的程序将打印

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