使用strcmp()函数时对逻辑的困惑

时间:2015-12-14 00:22:43

标签: c strcmp

char string1[10];
char string2[10];

strcpy(string1, "hello");
strcat(string2, string1);

if(strcmp(string1, string2)){
   printf("Heellloww!!!);
} else {
   printf("Bye");
}

当我对if(strcmp(string1, string2))执行检查时,应该strcmp()返回什么?它是否总是返回正1才能执行if中的语句?

2 个答案:

答案 0 :(得分:2)

请务必查看手册:

int strcmp(const char *s1, const char *s2);

  

返回值:   如果找到s1(或其前n个字节),则strcmp()和strncmp()函数返回小于,等于或大于零的整数,小于,匹配或大于s2

在您的情况下,如果strcmpstring1相同(或匹配),string2将返回零。因此,如果 相同,则打印Bye,如果它们不同,则打印Heellloww

答案 1 :(得分:2)

您的代码问题是strcat:它会导致未定义的行为

为了使strcat起作用,传递给它的两个字符串必须以空值终止。但是,您传递的第一个字符串是而不是以null结尾 - 实际上,它是未初始化的。

解决这个问题很简单 - 您可以在声明中将{0}置于string2的初始位置:

char string2[10] = { 0 };

现在字符串将比较相等,这意味着strcmp将返回零。如果您希望在两个字符串相同时打印Heellloww,则需要将== 0添加到if语句中。