настройка char** argv в коде

Итак, у меня есть программа под названием prog.exe, которая начинается с

int main(int argc, char** argv)

Параметры, которые я передаю ему,

prog.exe news-rec

или prog.exe новости-rec -t -p

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

Например для

prog.exe news-rec

Я думаю, что argc = 1, но как мне настроить argv, что это будет? я пытался сделать

argv[0] = "news-rec";

но это не работает


person Murphy316    schedule 16.10.2012    source источник


Ответы (2)


Потому что argv[0] содержит имя самого исполняемого файла. Пытаться

argc = 2;
argv[1] = "news-recc";
person Community    schedule 16.10.2012
comment
@AdamZedan Если бы вы предоставили хотя бы некоторый контекст об этой таинственной неработоспособности, нам было бы намного проще определить, что не так, и, следовательно, помочь вам. - person ; 16.10.2012
comment
argc будет увеличиваться, так как первый счетчик относится к имени исполняемого файла. - person Abhineet; 16.10.2012
comment
@AdamZedan Потрясающе. Также спасибо за Абхинита. Если это сработало, я был бы признателен, если бы вы приняли мой ответ. - person ; 16.10.2012
comment
@H2CO3- Мы все здесь, чтобы помочь. Не за что. :-) - person Abhineet; 16.10.2012
comment
@ H2CO3 Разве структуру argv не нужно инициализировать, прежде чем пытаться заполнить ее вручную? - person Mihai Todor; 16.10.2012
comment
@MihaiTodor нет, с чего бы это? В любом случае, если даже вы не уверены в этом, почему вы сразу минусуете? - person ; 16.10.2012
comment
@ H2CO3 Я не отрицал ваш ответ :( и я не знаю, кто это сделал. Мне просто любопытно, как инициализируется argv при выполнении программы, поскольку я не ожидаю, что она автоматически изменит свой размер, когда вы пишете argv[ 2] = foo; argv[3] = bar и так далее, когда программа выполняется без каких-либо аргументов... - person Mihai Todor; 16.10.2012
comment
@MihaiTodor, конечно, его размер не изменяется автоматически, однако его нужно объявить таким образом, чтобы было достаточно места для всех аргументов, например. грамм. char *argv[3] для двухпараметрической программы. - person ; 16.10.2012
comment
@ H2CO3 Хорошо, достаточно честно, но если вы используете int main(int argc, char **argv), то кто сможет его инициализировать и как вы можете добавить больше вещей в argv? Мне всегда было интересно, как это работает... - person Mihai Todor; 16.10.2012
comment
@MihaiTodor ОС устанавливает это. И это действительно не может быть расширено. - person ; 16.10.2012

Вам не нужно указывать prog.exe в аргументе командной строки, так как имя exe всегда является argv[0], то есть первым аргументом. Помимо этого, вы можете хранить столько аргументов в argv, сколько пожелаете, например::

argv[1] = "new-rec" ;
argv[2] = "-t" ;
argv[3] = "-p" ;

и так далее...

Предполагая из тега, что вы работаете в Visual Studio, вы можете попробовать:

Вкладка "Проект"-> Свойства-> Свойства конфигурации-> Отладка, а затем введите в правой части раздела (Аргументы команды) аргументы, которые вы хотите передать, исключая >прог.exe. argc автоматически подсчитывает количество переданных вами аргументов.

person Abhineet    schedule 16.10.2012