Это потому, что находка сравнивает указатели.
Действие по умолчанию - сравнение значения указателя (не строкового значения).
Два варианта:
A : изменить
temp2 = strdup(signal_list.at(3));
// Change this to:
temp2 = signal_list.at(3);
Теперь он найдет совпадение по двум указателям.
B : переключиться на использование std :: string вместо char*
std::vector<char*> signal_list;
char* temp2;
// Change to:
std::vector<std::string> signal_list;
std::string temp2;
Теперь он будет использовать сравнение строк и будет вести себя так, как вы ожидаете.
ПРИМЕЧАНИЕ. Строковые литералы имеют тип char const*
, а не char*
. Поэтому хранить их в таком vector<char*>
очень опасно. Любая попытка изменить их может привести к сбою в работе вашего приложения. По крайней мере, используйте vector<char const*>
. Если вы смотрели ваши предупреждения, компилятор предупредит вас об устаревшем преобразовании из char const*
в char*
.