2013-12-21 5 views
-2

Я учусь C и в одном из примеров, мы пишем программу, как это:ARGC и ARGV [] в языке C

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
// go through each string in argv 

int i = 0; 
while(i < argc) 
{ 
    printf("arg %d: %s\n", i, argv[i]); 
    i++; 
} 

// let's make our own array of stringd 
char *states[] = {"California", "Oregon", "Washington", "Texas"}; 

int num_states = 4; 
i = 0; // watch for this 
while(i < num_states) 
{ 
    printf("state %d: %s\n", i, states[i]); 
    i++; 
} 

return 0; 
} 

и если я запустить его в терминале, как это:

./ex11 test arguments 

я получаю выход:

arg 0: ./ex11 
arg 1: test 
arg 2: arguments 
state 0: California 
state 1: Oregon 
state 2: Washington 
state 3: Texas 

Однако я не понимаю, почему часть «Test аргумент» печатается, я знаю, что есть что-то делать с argc и argv, но я не знаю как.

Может кто-нибудь объяснить это мне (желательно простым способом)?

+4

Проконсультируйтесь с местным справочником на языке C - желательно, книгой. Это очень, очень простой материал. –

+2

«Я написал цикл, который выводит аргументы. Так почему моя программа печатает свои аргументы?» ----- Я даже не ........... –

ответ

1

Когда команда, любая команда, запускается оболочка (на самом деле, любая оболочка) на Unix, то командная строка преобразуется в массив строк:

cmd_argv[0] = "./ex11"; 
cmd_argv[1] = "test"; 
cmd_argv[2] = "arguments"; 
cmd_argv[3] = NULL; 
cmd_argc = 3; 

и затем вызывает:

execvp(cmd_argv[0], cmd_argv); 

Обратите внимание, что все перенаправления ввода/вывода будут удалены, и т.д. Внутренне, система заканчивает подсчет числа ненулевых указателей на старте cmd_argv массива и передает их как argv в новой программе, и счет argc. Новая программа гарантирована, что argc >= 0 и argv[argc] == NULL.

Этот список почти такой же формы, как и список состояний; основное отличие состоит в том, что cmd_argv[cmd_argc] - это нулевой указатель, который, конечно же, не гарантируется данными состояний.

1

Это то, что делает ваш первый цикл, он выполняет итерацию по строкам в argv (который содержит имя программы и аргументы, которые вы вводили после нее), и распечатывает их. Argc - количество аргументов, которые вы передали, или эквивалентно длина argv.

1

argv - аргументы командной строки, включая имя исполняемого файла (значения aguments). argc - количество элементов в argv (количество аргументов).

В вашем первом цикле вы печатаете содержимое argv, поэтому вы получаете аргументы, которые были переданы вашей программе.

Смежные вопросы