Strcmp() 函数未返回 0

Strcmp() function isn't returning 0

我试图使用 strcmp() 比较两个字符串,如果它们等于函数 returns -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;

}

在 C 中,字符串需要以 null 结尾才能与标准库一起使用。尝试在末尾放置一个 '\0',或者以 "normal" 的方式制作一个字符串文字,例如char password[] = "666666";,那么语言会自动把[=11=]放在最后。

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

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

没有分配您想要分配的内容。如果你也在这个 6 周围加上引号,你会得到正确的内容,但你的程序仍然会被破坏,因为 strcmp 需要空终止。

您可以通过两种方式修复它:

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