使用strdup时,std :: find不起作用

0 c++ string vector find strdup

我使用a std::vector来存储一些字符串,稍后我尝试std::find它们但是通过strdup,如示例代码中所示,它不起作用,std::find返回last,这意味着它没有找到字符串,但我可以看到它是在那里,当我通过该std::vector::at功能访问它时,它正确显示.问题是什么?

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stdint.h>
#include <string.h>

int main()
{
    std::vector<char*> signal_list;
    std::vector<char*>::iterator it;
    char *temp;
    char *temp2;

    signal_list.push_back("DDF_LTEsyn__CALLER");
    signal_list.push_back("DDF_LTEsyn__FFT_ctrl");
    signal_list.push_back("DDF_LTEsyn__IFFT_ctrl");
    signal_list.push_back("DDF_LTEsyn__ae_ctrl");
    signal_list.push_back("DDF_LTEsyn__cwp_ctrl");
    signal_list.push_back("DDF_LTEsyn__decision_ctrl");
    signal_list.push_back("DDF_LTEsyn__ovelap_ctrl");
    signal_list.push_back("DDF_LTEsyn__pilots_ctrl");
    signal_list.push_back("DDF_LTEsyn__pre_ctrl");
    signal_list.push_back("DDF_LTEsyn__rep_ctrl");

    temp2 = strdup(signal_list.at(3));

    printf("There is %s at position %d\n",temp2, 3);

    it = find(signal_list.begin(), signal_list.end(), temp2);

    printf("i found %s at position %d ",temp2, it - signal_list.begin());

}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rst 8

您正在比较指针地址,而不是字符串.您应该使用std::vector<std::string>或使用std::find_if()并传递一个可以比较char指针的谓词.

以下是你如何做到第二个:

bool compare(const char *str1, const char *str2)
{
    return strcmp(str1, str2) == 0;
}

it = std::find_if(signal_list.begin(), signal_list.end(), std::bind2nd(std::ptr_fun(compare), tmp2));
Run Code Online (Sandbox Code Playgroud)