Никогда не обвиняйте функцию, которая принадлежит библиотеке C.stricmp, безусловно, работает как положено, то есть строки действительно разные.Должно быть что-то не так с логикой в этой функции - вы должны использовать операторы printf
, чтобы выяснить, где и почему строки различаются.
РЕДАКТИРОВАТЬ: Я собрал простую тестовую программу,Это работает для меня:
#include <stdio.h>
#include <list>
using namespace std;
// Dummy
class Employee
{
public:
Employee(const char *n){ id = strdup(n); }
char *id;
char *GetId() { return this->id; }
};
Employee* FindEmp(list<Employee*> *lst, char* id)
{
bool continue1 = true;
Employee *tmp = NULL;
char* tmpId = NULL;
list<Employee*>::iterator iter = lst->begin();
if(id == NULL || lst->empty())
return NULL;
while(iter != lst->end() && continue1)
{
tmp = (Employee*)(*iter);
tmpId = (*tmp).GetId();
if(tmpId != NULL)
{
if(stricmp(tmpId,id) == 0)
continue1 = false;
}
if(continue1 == true)
iter++;
}
if(iter == lst->end())
return NULL;
return (Employee*)(*iter);
}
int main(int argc, char **argv)
{
list<Employee*> l;
l.push_back(new Employee("Dave"));
l.push_back(new Employee("Andy"));
l.push_back(new Employee("Snoopie"));
printf("%s found\n", FindEmp(&l, "dave")->GetId());
printf("%s found\n", FindEmp(&l, "andy")->GetId());
printf("%s found\n", FindEmp(&l, "SnoOpiE")->GetId());
return 0;
}
Обратите внимание, что я использовал предоставленную вами функцию.Опять же, в stricmp нет ничего плохого, проблема должна быть в вашем коде.