在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序。
调用主函数main时,有两个参数,第一个参数表示运行程序时命令行中参数的数目;第二个参数表示指向字符串数组的指针,其中每个字符串对应一个参数。
main(int argc, char *argv[])
argc和argv是习惯性用法,可以更改。
argv是一个指向指针的指针,
这个数组的每个元素都是一个字符指针,指向的第一个参数就是程序的名称,最后一个是NULL。
#include
<
stdio.h
>
int main( int argc, char * argv[])
{
int i;
for (i = 1 ; i < argc; i ++ )
printf( " %s%s " ,argv[i], (i < argc - 1 ) ? " " : "" );
printf( " /n " );
system( " PAUSE " );
return 0 ;
}
int main( int argc, char * argv[])
{
int i;
for (i = 1 ; i < argc; i ++ )
printf( " %s%s " ,argv[i], (i < argc - 1 ) ? " " : "" );
printf( " /n " );
system( " PAUSE " );
return 0 ;
}
将程序编译后生成可执行文件,这里命名为ee.exe,路经为D:\。
注意,此代码在编译环境中运行是没有效果的,必须在DOS下运行。
进入DOS环境,进入D:\,输入
ee Hello world
将会打印出
Hello world
按照C语言的约定,argv[0]的值是启动该程序的程序名,因此argc的值至少为1。如果argc的值为1,则说明程序名后面没有命令行参数。在上面的例子中,argc的值为3,argv[0]、argv[1]和argv[2]的值分别为“ee”、“Hello”和“world”。
UNIX系统中,C语言程序有个公共的约定,以负号开头的参数表示一个可选的标志或参数。
模式查找程序:
#include
<
stdio.h
>
#include < string .h >
#define MAXLINE 1000
int getline( char line[], int max);
main( int argc, char * argv[])
{
char line[MAXLINE];
long lineno = 0 ;
int c,except = 0 ,number = 0 ,found = 0 ;
while ( -- argc > 0 && ( *++ argv)[ 0 ] == ' - ' )
while (c = * ( ++ argv[ 0 ]))
switch (c)
{
case ' x ' :
except = 1 ;
break ;
case ' n ' :
number = 1 ;
break ;
default :
printf( " find:illegal option %c\n " ,c);
argc = 0 ;
found = - 1 ;
break ;
}
if (argc != 1 )
printf( " Usage:find -x -n pattern\n " );
else
while (getline (line ,MAXLINE) > 0 )
{
lineno ++ ;
if ((strstr(line , * argv) != NULL) != except)
{
if (number)
printf( " %ld: " ,lineno);
printf( " %s\n " ,line);
found ++ ;
}
}
return found;
}
int getline( char s[] , int lim)
{
int c,i;
for (i = 0 ;i < lim - 1 && (c = getchar()) != ' \n ' ; i ++ )
s[i] = c;
s[i] = ' \0 ' ;
return i;
}
#include < string .h >
#define MAXLINE 1000
int getline( char line[], int max);
main( int argc, char * argv[])
{
char line[MAXLINE];
long lineno = 0 ;
int c,except = 0 ,number = 0 ,found = 0 ;
while ( -- argc > 0 && ( *++ argv)[ 0 ] == ' - ' )
while (c = * ( ++ argv[ 0 ]))
switch (c)
{
case ' x ' :
except = 1 ;
break ;
case ' n ' :
number = 1 ;
break ;
default :
printf( " find:illegal option %c\n " ,c);
argc = 0 ;
found = - 1 ;
break ;
}
if (argc != 1 )
printf( " Usage:find -x -n pattern\n " );
else
while (getline (line ,MAXLINE) > 0 )
{
lineno ++ ;
if ((strstr(line , * argv) != NULL) != except)
{
if (number)
printf( " %ld: " ,lineno);
printf( " %s\n " ,line);
found ++ ;
}
}
return found;
}
int getline( char s[] , int lim)
{
int c,i;
for (i = 0 ;i < lim - 1 && (c = getchar()) != ' \n ' ; i ++ )
s[i] = c;
s[i] = ' \0 ' ;
return i;
}