Как передать char** внутрь сишной функции?

api выглядит вот так:

void foo(char** outStrings);

нужно подать char**. Естественно вся работа с памятью ложиться на вызывающую сторону. И вот вопрос, как это делать?

Можно написать raii класс для простоты.

class Strings {
public:
    explicit String(size_t count, size_t stringSize) {
        data = new char*[count];
        for(int i = 0; i < count; ++i)
            data_ [i] = new char[stringSize + 1];
    }
    ~Strings() // деструткор все удалит
};

и использовать его вот так, точно зная, что деструктор вызовется и не будет мемориликов

Strings stringList(14,255);
foo(stringList.data());

А можно ли каким то образом передать внутрь той функции какойнибудь std::vector<std::string>> ? ну или сделать это какнить более "модерн" (под модерн я понимаю более современную интерпритацию плюсов... скажем ,например, без оператора new)?

Кто решал такие задачи, поделитесь опытом


Ответы (1 шт):

Автор решения: Sergey

А причём тут классы, векторы и всё прочее из плюсов? Описание char ** пришло из чистого С и означает массив символьных массивов. Как то так:

int j;
char *array[20];

for (j=0; j<20; j++) array[j] = (char *) malloc(256);

foo(array);
→ Ссылка