// how to convert std::vector to const char**? #include #include #include #include void print_strings(const std::vector strings) { using std::cout; using std::endl; cout << "== Printing some std::vector strings:" << endl; for (const std::string &s : strings) { cout << s << endl; } } const char** convert_to_c(const std::vector strings) { // Note: perfectly fine to "new" const char*. const char** strings_c = new const char*[strings.size()+1]; for (size_t i = 0; i < strings.size(); ++i) { // XXX No need to copy the string here. char* string_c = new char[strings.at(i).size()+1]; strncpy(string_c, strings.at(i).c_str(), strings.at(i).size()+1); strings_c[i] = string_c; } strings_c[strings.size()] = NULL; return strings_c; } void free_c(const char** strings_c) { for (size_t i = 0; strings_c[i] != NULL; ++i) { delete[] strings_c[i]; } delete[] strings_c; } void print_strings_c(const char** strings_c) { using std::cout; using std::endl; cout << "== Printing some const char** strings:" << endl; for (size_t i = 0; strings_c[i] != NULL; ++i) { cout << strings_c[i] << endl; } } void foo(const char* string) { printf("foo: %s\n", string); } int main() { foo("foo"); char* bar = new char[4]; strncpy(bar, "bar", 4); foo(bar); delete[] bar; std::vector some_strings = { "just", "some", "strings", "here" }; print_strings(some_strings); const char **some_strings_c = convert_to_c(some_strings); print_strings_c(some_strings_c); free_c(some_strings_c); }