ALTE DOCUMENTE
|
||||||
Системные средства, на кото 15515s184p рые опирается реализация языка «С», позволяют передавать командную строку аргументов или параметров начинающей выполняться программе. Когда функция main argc число аргументов в командной строке, с кото 15515s184p рыми происходит обращение к программе; второй аргумент (argv
echo, кото 15515s184p рая просто печатает в одну строку аргументы командной строки, разделяя их пробелами. Таким образом, если дана команда:
echo Hello, World
Hello, World
argv[0] является именем, по кото 15515s184p рому вызывается программа, так что argc argc argv[0] argv[1] argv[2] "echo" "Hello," и "World". Первым фактическим агументом является argv[1] argv[argc-1] argc echo
echo
main int argc char argv
argv
echo
main(int argc, char *argv[])
argv argv argv argv argv argc
echo
main(int argc, char *argv[])
printf
. Давайте внесем некото 15515s184p рые усовершенствования в программу отыскания заданной комбинации символов из главы 5. Если вы помните, мы поместили искомую комбинацию глубоко внутрь программы, что очевидно является совершенно неудовлетворительным. Следуя утилите grep Unix
#define maxline 1000
main(int argc, char *argv[])
Теперь может быть развита основная модель, иллюстрирующая дальнейшее использование указателей. Предположим, что нам надо предусмотреть два необязательных аргумента. Один утверждает: «Напечатать все строки за исключением тех, кото 15515s184p рые содержат данную комбинацию», а второй гласит: «Перед каждой выводимой строкой должен печататься ее номер».
-x -n
find x n the
Now is the time
For all good men
To come to the aid
Of their party.
2: For all good men
index argv[2] argv[1]
find nx
#define maxline 1000
main(int argc, char *argv[])
if (argc != 1)
printf("usage: find -x -n pattern\n");
else
while (getlin (line, maxline) > 0)
}
}
argv argc argc *argv *++argv является указателем аргументной строки: (*++argv)[0] - её первый символ. Круглые скобки здесь необходимы, пото 15515s184p му что без них выражение бы приняло совершенно отличный и неправильный вид: *++(ARGV[0]) **++argv
add
add 2 3 4 + *
entab detab
entab detab
entab -m +n
n m
tail n n
tail -n
n n sort
|