Strcmp()函数不返回0

时间:2015-09-06 17:43:05

标签: c strcmp

我试图使用strcmp()比较两个字符串,如果它们等于函数返回-1(意味着它们不相等),我不知道什么是错的。

int main()
{
char password[]={'6','6','6','6','6','6'};
char passmatch[6];
int i =0;
for(i ; i<6 ; i++)
{
    passmatch[i]='6';
}

printf("\n");
if(strcmp(password,passmatch)==0)
{
    printf("Strings are equal");
}
else
{
    printf("String are'nt equal");
}


return 0;

}

2 个答案:

答案 0 :(得分:6)

在C中,字符串需要以空值终止才能与标准库一起使用。尝试在末尾添加'\ 0',或以“正常”方式创建字符串文字,例如char password[] = "666666";,然后语言会自动将\0放在最后。

答案 1 :(得分:1)

问题在于C '6'(带引号)与6(不带引号)不同。这就是为什么这个循环

for(i ; i<6 ; i++) {
    passmatch[i]=6; // <<== Should be '6', not 6
}

未分配您要分配的内容。如果你在6附近加上引号,你会得到正确的内容,但你的程序仍然会被破坏,因为strcmp需要空终止。

您可以通过两种方式解决问题:

  • 手动或通过字符串文字初始化
  • 为两个C字符串添加空终止
  • 切换到使用memcmp,这需要长度,因此不需要空终止。