#c strcmp() не работает должным образом

Я хочу сравнить два char*, поэтому я делаю это с помощью strcmp, смотрите, в режиме отладки оба char* в strcmp получают одно и то же значение, и все же он не возвращает 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;
}

почему это??


person k-man    schedule 29.11.2010    source источник
comment
С какими значениями вы это называете.   -  person Preet Sangha    schedule 29.11.2010
comment
Являются ли строки определенно обеими ASCII? Вы уверены, что байты после m в Cellcom оба пустые?   -  person jtdubs    schedule 29.11.2010
comment
точно Джеймс... я исправлю, но проблема не в этом   -  person k-man    schedule 29.11.2010
comment
jtdubs - может быть, нет, но я добавил изображение отладки со значениями этих символов *...   -  person k-man    schedule 29.11.2010
comment
Вы пытались распечатать как pcompany, так и psearchWord, а также распечатать версию байт-кода каждой буквы, чтобы убедиться, что они идентичны. Strcmp существует уже давно, я сомневаюсь, что в этом коде есть какая-то ошибка.   -  person James Black    schedule 29.11.2010
comment
и Джеймс ... нет, после повторной проверки никогда не делайте дважды free (), после первого у меня есть возврат, поэтому он не дойдет до другого ... и что такое версия байт-кода?   -  person k-man    schedule 29.11.2010


Ответы (1)


Попробуйте простой цикл for для вывода символов в pcompanyList->thisCompany->pcompany по одному:

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

Вы можете сделать это или проверить длину каждой строки, чтобы убедиться, что нет скрытых символов, которые не отображаются в отладчике при проверке строк.

person Nathan S.    schedule 29.11.2010