convert vector into char** C++

前端 未结 3 1834
慢半拍i
慢半拍i 2020-11-27 20:24

I have a vector variable. I need to pass it onto a method which accepts char**as an input parameter.

how to do this ? If

3条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 20:54

    The top rated answers for this question expect you to pass in a size with your char** parameters. But in method_to_be_called() there is no way to pass in a size for par2 and par3 so these lists of c-style strings probably expect to be null terminated. In other words the last string (char*) in the list of strings (char **) needs to be a null pointer. This is a common paradigm in many c libraries.

    int method_to_be_called(char* par1, char ** par2, char ** par3, void* pRetValue);
    

    The most expedient way around this is probably to go with a more c-style answer.

    //directly create char** par2
    std::vector par2Vect{"one", "two", "three"};
    char ** par2 = (char**) malloc( sizeof(char*)*(par2Vect.size() + 1) );
    for(size_t i = 0; i < par2Vect.size(); ++i)
    {
        par2[i] = strdup(par2Vect[i].c_str());
    }
    // set the last entry to null to signify the end of the list
    par2[par2Vect.size()] = nullptr;
    
    // call your library
    method_to_be_called(..., par2,...);
    
    // delete par2
    for(size_t i = 0; i < par2Vect.size(); ++i)
    {
        // free memory for each c-style string
        free(par2[i]);
    }
    // free memory for outer char* array 
    free(par2);
    

提交回复
热议问题