_stricmp未按预期进行比较

时间:2018-05-22 17:56:24

标签: c string fgets

我写了这个简单的脚本,它让我发疯了。我无法理解为什么我所做的比较总是不一样。

这是我的代码:

int main()
{
        char test[]="boy";
        char test2[20];

        fgets(test2, 20, stdin);

        if (_stricmp(test2, test) == 0)
        {
            printf("the same");
        }
        else
        {
            printf("Not");
        }
    }

如果我插入“男孩”这个词,我仍然会弄错。

有什么问题?

2 个答案:

答案 0 :(得分:2)

所以看起来我们应该添加一个新行然后它很好用

char test[]="boy\n";

答案 1 :(得分:0)

已经回答。但是在地址@Jabberwocky的评论中添加我的答案。

该程序的问题不在col-md中,而在_stricmp中。当您键入“ boy”时,fgets数组将填充test2,这不等于{ 'b', 'o', 'y', '\n', '\0' }

  

C库函数char * fgets(char * str,int n,FILE * stream)从指定的流中读取一行并将其存储到str指向的字符串中。当读取(n-1)个字符,读取换行符或到达文件结尾(以先到者为准)时,它将停止。

您有两种方法可以解决此问题:

  • { 'b', 'o', 'y', '\0' }添加到\n的末尾,因此它变成test。如果您正在使用该字符串执行其他操作,而无需在其中添加char test[] = "boy\n";,则可能会很烦人。因此,我建议第二种选择。

  • 在读取输入后删除\n,然后进行比较。通常,我编写自己的\n函数来解决此问题,并在用户输入的长度大于缓冲区长度时解决该问题。

    GetString