【发布时间】:2015-09-04 18:12:47
【问题描述】:
我正在测试一个小程序,它基本上比较两个输入字符串是否相同(就像 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;
}
【问题讨论】:
-
命令行中传入的字符串在
argv中传入。 -
为了记录,您通常应该使用
fgets而不是gets来防止缓冲区溢出。如果我写了两个在最后一个字母上不同的 1001 个字符的单词怎么办?您的程序将无法处理。fgets允许您将要读取的字符数设置为安全的(应该比缓冲区的总大小小 1)。
标签: c