Работа с char ** argv - PullRequest
       12

Работа с char ** argv

3 голосов
/ 12 января 2010

Как мне назначить последовательность символьных строк переменной char ** argv в программе? Это аргумент командной строки. В настоящее время я пытаюсь преобразовать приложение .exe в DLL.

Например:

{"string1", "string2", "string3"} ---> char ** переменная argv

Моя проблема как-то решена на это: Как работает массив указателей на указатели? , но я не могу заставить его работать, используя приведенный там фрагмент. Помогите!

Ответы [ 3 ]

8 голосов
/ 12 января 2010

const char* argv[] = {"string1", "string2", "string3", 0};

Если аргументы не являются постоянными времени компиляции, я бы сделал что-то вроде:

std::vector<const char*> arguments;
arguments.push_back(somePointer);
arguments.push_back(someOtherPointer);
arguments.push_back(0);
const char** argv = &arguments[0];

РЕДАКТИРОВАТЬ: Используя информацию PaxDiablos о том, что массив argv должен быть нулевым.

0 голосов
/ 12 января 2010

Обратите внимание, что ответ Андреаса Бринкса - это действительно то, что вы хотите сделать, где vector выполняет всю тяжелую работу по выделению ресурсов и обеспечивает безопасность исключений. Я настоятельно рекомендую вам изменить любую причину, по которой вы не можете использовать вектор. Но если вы действительно не можете этого сделать, я думаю, вы могли бы сделать что-то вроде следующего кода:

int numArgs = YOUR_NUMBER_HERE;

char **myArgv = new char*[numArgs+1];

for (int i=0; i<numArgs; ++i) {
    myArgv[i] = new char[at least size of your argument + 1];
    strncpy(myArgv[i], whereever your string is, buffer size);
    myArgv[buffer size] = '\0';
}
myArgv[numArgs] = NULL;


// use myArgv here


// now you need to manually free the allocated memory
for (int i=0; i<numArgs; ++i) {
    delete [] myArgv[i];
}
delete [] myArgv;
0 голосов
/ 12 января 2010

как насчет getopt ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...