【问题标题】:Strcmp() function isn't returning 0strcmp() 函数不返回 0
【发布时间】:2015-09-06 17:43:05
【问题描述】:

我试图使用 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;

}

【问题讨论】:

    标签: c strcmp


    【解决方案1】:

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

    【讨论】:

    • 好的,但是如果用户自己输入字符串与 main() 中定义的保存字符串进行比较,该怎么办?
    • 这取决于您获得输入的准确程度,但基本上您需要保证生成的字符串以空值结尾。大多数标准方法都会为您做到这一点。
    • 我的程序需要用户输入密码,如果用户输入的密码与保存的密码匹配,应用程序将运行,用户必须使用键盘按数字输入密码,所以我保存每个字符串数组中的数字,输入 6 位数字后,我检查输入的密码是否 = 默认密码。
    • 是的,所以重要的是你使用什么确切的 C 代码来获取用户的输入,这将决定它是否以空值结尾
    • 我认为您不应该期望用户输入空终止符。
    【解决方案2】:

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

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

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

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

    • 为两个 C 字符串添加空终止,手动或使用字符串字面量初始化,
    • 改用memcmp,它需要长度,因此不需要空终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      相关资源
      最近更新 更多