Создание массива строковых массивов с завершающим нулем, где большинство строковых массивов являются статическими

Я пытаюсь создать массив строковых массивов с нулевым завершением. Все в массиве известно во время компиляции, кроме одного элемента, который помещается в него во время выполнения.

Вот как я хочу, чтобы массив выглядел: [ ["command1", "arg", "arg", 0], ["command2", 0], argv, ["command3", "arg", 0] ]

Итак, здесь command1, command2 и их аргументы известны во время компиляции, во время выполнения в него помещается только argv.

Проблема в том, что я не могу заставить это работать. В настоящее время я делаю это, чтобы создать массив с командами NUM_COMMANDS (число):

char *commands[ NUM_COMMANDS ][] = {
    {"command1", "arg", 0}, 
    {0}, /*This is where I want to place argv*/
    {"command2", "arg", 0}
    };

Но это не позволит мне вставить argv.

Как я могу изменить это на тот массив, который мне нужен?

Спасибо!


person bjrnt    schedule 21.04.2013    source источник
comment
Еще не читал, но это должно помочь: stackoverflow.com/questions/2305255/   -  person rliu    schedule 21.04.2013
comment
Возможно, вам потребуется добавить дополнительную информацию, например, что такое NUM_COMMANDS и как вы пытаетесь вставить argv.   -  person Some programmer dude    schedule 21.04.2013
comment
(И сообщение об ошибке компилятора.)   -  person Mat    schedule 21.04.2013
comment
Это потому, что ваш commands является постоянным значением. Вам нужно выделять память динамически. Что-то вроде: char *commands_d[NUM_COMMANDS]; for(int i = 0; i < NUM_COMMANDS; i++) commands_d[i] = commands[i]; commands[2] = argv;   -  person Eddy_Em    schedule 21.04.2013


Ответы (1)


Мне удалось решить эту проблему самостоятельно после прочтения ссылки на вопрос, опубликованный roliu.

char **commands[ NUM_COMMANDS ];
char *command1[] = {"command1", 0};
char *command2[] = {"command2", "arg", 0};

argv[0] = "grep";

commands[0] = (char **) command1;
commands[1] = (char **) argv;
commands[2] = (char **) command2;

Спасибо за комментарии к исходному вопросу!

person bjrnt    schedule 21.04.2013