C命令行参数

时间:2022-12-02 14:28:51
C语言 命令行参数[转]

在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序。

调用主函数main时,有两个参数,第一个参数表示运行程序时命令行中参数的数目;第二个参数表示指向字符串数组的指针,其中每个字符串对应一个参数。

main(int argc, char *argv[])

argc和argv是习惯性用法,可以更改。

argv是一个指向指针的指针,

这个数组的每个元素都是一个字符指针,指向的第一个参数就是程序的名称,最后一个是NULL。

C命令行参数

#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 ;
}

将程序编译后生成可执行文件,这里命名为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;
}
C命令行参数