我正在测试一个小程序,它基本上比较了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;
}
答案 0 :(得分:5)
你不应该这样做。相反,我建议您了解命令行参数如何通过main
和argc
参数传递给argv
函数。
我建议你尝试这个程序来帮助你理解:
#include <stdio.h>
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"
答案 1 :(得分:3)
此解决方案应该有效:
#include <stdio.h>
#include <string.h>
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.");
}