我正在测试一个小程序,基本上它会比较两个输入字符串是否相同(就像strcmp函数一样)。然而,无论如何,我都得到了结果,说这两个字符串是不同的。如果有人能找出一些错误,我会很感激。
int comp(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];
cmp = comp(str1, str2);
if (cmp == 0)
printf("The two strings are identical.\n");
else
printf("The two strings are different.\n");
return 0;
}
str1[1000]
和str2[1000]
的内容从未被设置。我们甚至不能确定它们是否有空字符终止符。 - chux - Reinstate Monicastrcmp()
在相等时返回0
。 - alk(int)0
或(int)1
。comp
显然是strequal
。strcmp
返回三元结果,因此这是一个不好的参考。一般来说,应该使用“可读性强”的名称:if ( strequal(...) )
比if ( !strcomp(...) )
更好。 - too honest for this sitecomp
实际上应该被称为strequal
或者类似的名称。最后一个应该是if ( !comp(...) )
。 - too honest for this sitewhile (str1[i] == str2[i]) { if (str1[i] == '\0') break; i++; }
。|| str2[i] == '\0'
永远不会成立。 - chux - Reinstate Monica