【问题标题】:#c strcmp() isn't working as it should#c strcmp() 没有正常工作
【发布时间】:2010-11-29 01:58:44
【问题描述】:

我想在两个 char* 之间进行比较,所以我使用 strcmp, 看,在调试模式下,strcmp 中的两个 char* 都得到相同的值,但它仍然是 不会返回 0,它会跳过 if() 条件而不是输入它:

这里来自调试器的图片: http://img405.imageshack.us/img405/5218/111fi.jpg

Company FindCompany(CompanyL pcompanyList, int companyIdentityDigit) 
{
    Company companyFound;
    char *psearchWord;
    psearchWord = (char*)malloc(10*sizeof(char));

    switch(companyIdentityDigit) {
        case 0: 
            strcpy(psearchWord , "Pelephone");
            break;
        case 2: 
            strcpy(psearchWord , "Cellcom");
            break;
        case 4: 
            strcpy(psearchWord , "Orange");
            break;
    }

    while(pcompanyList->next != NULL)   {
        if(strcmp(pcompanyList->thisCompany->pcompany , psearchWord) == 0)  {
            free(psearchWord);
            return pcompanyList->thisCompany;
        }
        pcompanyList = pcompanyList->next;
    }
    free(psearchWord);
    return NULL;
}

为什么会这样??

【问题讨论】:

  • 你用什么值来称呼它。
  • 字符串肯定都是ASCII吗?您确定 Cellcom 中 m 之后的字节都是空的吗?
  • 正确的詹姆斯...我会解决它,但这不是问题
  • jtdubs - 也许不是,但我用这些字符的值添加了调试图片*...
  • 您是否尝试过将 pcompany 和 psearchWord 都打印出来,并打印出每个字母的字节码版本以确保它们相同。 strcmp 已经存在很长时间了,我怀疑这段代码中存在一些错误。

标签: strcmp


【解决方案1】:

尝试一个简单的 for 循环,一次打印出 pcompanyList->thisCompany->pcompany 中的字符:

for (int x = 0; x < strlen(pcompanyList->thisCompany->pcompany); x++)
    printf("%c ", pcompanyList->thisCompany->pcompany[x]);

您可以执行此操作或检查每个字符串的长度,以确保在检查字符串时没有隐藏字符未显示在调试器中。

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多