Как написать argv и argc

Я понимаю, что делают argv и argc и как они используются, но мне нужно их воссоздать. В C, как бы вы написали функцию, имитирующую их.


person confusedProgrammer    schedule 07.10.2013    source источник
comment
У вас сложилось впечатление, что argv и argc просто магические переменные? Что-то вроде ARGV в Perl?   -  person P0W    schedule 07.10.2013
comment
argv — это массив строк (массив указателей на символы), а argc — это длина этого массива. Таким образом, их воссоздание — это просто создание массива строк. Для чего вы хотите использовать argc и argv?   -  person Kninnug    schedule 07.10.2013
comment
Прочитайте Как использовать argv и argc   -  person Grijesh Chauhan    schedule 07.10.2013
comment
Мне нужно сделать именно то, что делают argv и arc, но внутри программы. Когда вы вводите строку символов, первая строка будет командой, а следующие строки будут аргументами, а argc ведет счет. Я понимаю, что вы не можете изменить argc и argv после запуска программы, поэтому мне нужно создать функцию, которая их имитирует.   -  person confusedProgrammer    schedule 07.10.2013


Ответы (4)


Вы просто создаете массив для хранения параметров, которые нужно передать как argv, и соответственно устанавливаете argc, что-то вроде;

int argc = 3;
char* argv[argc + 1];

argv[0] = "binary name";
argv[1] = "first parameter";
argv[2] = "second parameter";
argv[3] = NULL;

int result = main(argc, argv);
person Joachim Isaksson    schedule 07.10.2013
comment
Я не знаю, сколько у меня будет argc, он будет прочитан пользователем, и в них не должно быть пробелов. Итак, я знаю, что мне понадобится массив строк. Я ищу что-то вроде int main(){ char *command[100] int cNum = 30; получитькоманду(команда, cNum); while(strcmp(command[0], exit)) != 0){ // Делаем что угодно } return 0; } void getCommand(command, cnum){ // что-то сделать } - person confusedProgrammer; 07.10.2013
comment
@user2808307 user2808307 Я предлагаю вам посмотреть на stdarg.h - person Arpit; 07.10.2013
comment
@Arpit - да в C, нет в C++. - person Carl Norum; 07.10.2013

argc и argv используются, когда вы запускаете программу из командной строки или хотите передать программе некоторые переменные.
argc содержит количество аргументов, а argv — массив указателей на аргументы, которые являются строками.< br> Эти аргументы для main

main(int argc, char** argv)  

Синтаксис char** argv объявляет argv указателем на указатель на символ, то есть указатель на массив символов (строку символов) — другими словами, массив строк символов. Вы также можете написать это как char* argv[].

При запуске программы массив argv содержит по порядку всю информацию о командной строке при вводе команды (строки выделяются пробелами), включая саму команду. Целое число argc дает общее количество строк и, следовательно, равно количеству аргументов плюс один. Например, если вы набрали

a.out -i 2 -g -x 3 4

программа получит

argc = 7
argv[0] = "a.out"
argv[1] = "-i"
argv[2] = "2"
argv[3] = "-g"
argv[4] = "-x"
argv[5] = "3"
argv[6] = "4"
person haccks    schedule 07.10.2013
comment
Хорошо, предположим, что в моей программе мне нужно что-то подобное. Первая команда, очевидно, запустит программу, а следующие аргументы являются переменными для этой команды. - person confusedProgrammer; 07.10.2013
comment
@пользователь2808307; Обновил мой ответ. - person haccks; 07.10.2013

В C и C++ прототип функции main выглядит так:

int main(int argc, char *argv[]);
person luisrubioc    schedule 07.10.2013

Вы не можете воссоздать их, но вы можете изменить их имена.

В вашем основном вы можете ввести int main(int numberOfArguments, char *arrayOfArguments[]) и использовать numberOfArguments как argc и arrayOfArguments как argv.

person hazer_drum    schedule 07.10.2013