C语言编程实战-4-命令行参数(main函数)处理
- 格式:doc
- 大小:35.00 KB
- 文档页数:2
c语⾔main函数使⽤及其参数介绍每⼀C程序都必须有⼀main()函数,可以根据⾃⼰的爱好把它放在程序的某个地⽅。
有些程序员把它放在最前⾯,⽽另⼀些程序员把它放在最后⾯,⽆论放在哪个地⽅,以下⼏点说明都是适合的。
在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
* argc:整数,为传给main()的命令⾏参数个数。
* argv:字符串数组。
char* argv[],我们可以看出,argv的类型是char* [],即是⼀个指向字符数组的指针,所以我们还可以写作:char** argv。
在DOS 3.X版本中,argv[0]为程序运⾏的全路径名;对DOS 3.0以下的版本,argv[0]为空串("")。
argv[1]为在DOS命令⾏中执⾏程序名后的第⼀个字符串;argv[2]为执⾏程序名后的第⼆个字符串;...argv[argc]为NULL。
*env:字符串数组。
env[]的每⼀个元素都包含ENVVAR=value形式的字符串。
其中ENVVAR为环境变量如PATH或87。
value 为ENVVAR的对应值如C:\DOS,C:\TURBOC(对于PATH)或YES(对于87)。
TurboC2.0启动时总是把这三个参数传递给main()函数,可以在⽤户程序中说明(或不说明)它们,如果说明了部分(或全部)参数,它们就成为main()⼦程序的局部变量。
请注意:⼀旦想说明这些参数,则必须按argc,argv, env的顺序,如以下的例⼦:复制代码代码如下:main()main(int argc)main(int argc, char *argv[])main(int argc, char *argv[], char *env[])其中第⼆种情况是合法的,但不常见,因为在程序中很少有只⽤argc,⽽不⽤argv[]的情况。
以下提供⼀样例程序EXAMPLE.EXE,演⽰如何在main()函数中使⽤三个参数:复制代码代码如下:/*program name EXAMPLE.EXE*/#include#includemain(int argc,char *argv[],char *env[]){int i;printf("These are the %d command-line arguments passed to main:\n\n", argc);for(i=0; i<=argc; i++)printf("argv[%d]:%s\n", i, argv[i]);printf("\nThe environment string(s)on this system are: \\n\n");for(i=0; env[i]!=NULL; i++)printf(" env[%d]:%s\n", i, env[i]);}如果在DOS提⽰符下,按以下⽅式运⾏EXAMPLE.EXE: C:\example first_argument "argument with blanks" 3 4"last butone" stop!注意:可以⽤双引号括起内含空格的参数,如本例中的:"argumentwith blanks"和"Last but one")。
main函数与命令⾏参数main函数的概念C语⾔中main函数称之为主函数⼀个c程序从main函数开始执⾏的下⾯的main函数定义正确吗?main函数的本质main函数是操作系统调⽤的函数操作系统总是将main函数作为应⽤程序的开始操作系统将main函数的返回值作为程序的退出状态例⼦1:main函数的返回值test.c#include<stdio.h>int main(){printf("hello world");return 99;}gcc test.c -o test./testecho $? --> 99test2.c#include<stdio.h>int main(){printf("hello world2");return 0;}gcc test2.c -o test2./test && ./test2 --> hello world操作系统认为test不是正常退出,发⽣短路main函数的参数程序执⾏时可以向main函数传递参数例⼦2:main函数的参数#include <stdio.h>int main(int argc, char* argv[], char* env[]){int i = 0;printf("============== Begin argv ==============\n");for(i=0; i<argc; i++){printf("%s\n", argv[i]);}printf("============== End argv ==============\n");printf("\n");printf("\n");printf("\n");printf("============== Begin env ==============\n");for(i=0; env[i]!=NULL; i++){printf("%s\n", env[i]);}printf("============== End env ==============\n"); return 0;}⼩技巧main函数⼀定是程序执⾏的第⼀个函数吗?例⼦2:gcc中的属性关键字#include <stdio.h>#ifndef __GNUC__#define __attribute__(x)#endif__attribute__((constructor))void before_main(){printf("%s\n",__FUNCTION__); //gcc拓展宏代表函数名}__attribute__((destructor))void after_main(){printf("%s\n",__FUNCTION__);}int main(){printf("%s\n",__FUNCTION__);return 0;}⼩结⼀个c程序从main函数开始执⾏main函数是操作系统调⽤的函数main函数有参数和返回值现代编译器⽀持在main函数前调⽤其他函数。
C语言程序设计技巧之命令行参数在许多应用软件运行时都带有命令行参数,其实这些命令行参数在C 语言编写的程序中也可以实现,灵活地运用命令行参数进行处理可以有效地提高程序的运行效率,收到事半功倍的效果。
C语言中有关命令行参数涉及到程序的主函数main(int argc,char *argv[]这样两个参数,其中,int argc表示命令行参数的个数(包括可执行程序名本身),char *argv[]表示每个参数的具体内容,argv[0]为命令行中可执行程序名本身,argv[1]为命令行中第二个参数的内容,依次类推。
如下例输出命令行参数的个数及参数的内容:main (int argc,char *argv[]),{int I;printf(\n命令行中可执行文件名为:%s,argv[0]);printf(\n总共有%d个参数:,argc);I=0;while(argc>=1){printf(″%s ,argv[I++]);argc--;}}命令行参数用的最多还是在诸如DIR A:等之类带有盘符、路径或文件名这样的命令行中,所以说灵活处理这一类参数才能有效地提高程序的运行效果。
譬如DIR命令,其后可以是盘符,可以是路径,也可以是文件名,如何区分这一参数呢?请看下例(此程序模拟DIR命令,程序要求在命令行输入一个参数:盘符或路径或文件名,若无参数或参数多于一个都将取默认的参数“*.*”)。
\*--------------------功能:模拟DIR命令进行处理命令行参数--------------------*/#include#include#include#inchludeint j,num=0;char ss[20],path[50],path2[50];void main (int argc,char *argv[]){struct ffblk f;int done;if(argc==2) /*取命令行参数到数组中*/strcpy(ss,argv[1]);elsestrcpy(ss,″*.*″); /*给数组赋值缺省参数*/if (((ss[strlen(ss)-1]==′\\′||((ss[strlen(ss)-1]==':')) strcat(ss,″*.*″); /*若参数为路径或盘符,则加上″*.*″*/ getcwd(path1,50); /*取当前路径*/if (chdir(ss)==0) /*判断参数是否为路径*/strcat(ss,\\*.*); /*若路径末没有带\,则加上*.* */chdir(path1); /*恢复原来路径*/strcpy(path2,ss);for(j=strlen(path2);j>0;j--)/*提取参数中的路径到path2 */ {if((path2[j]=='\\'))||(path2[j]==':')){path2[j+1]='\0';goto senull;}}path2[0]='\0';senull:if(strlen(path2)==0) /* 若给出的参数中没带路径,则取当前路径*/ strcpy(path2,path1);printf(\n**模拟DIR**\n 命令目录路径%s,path2);done=findfirst(ss,&f,55); /*查找第一个配匹的文件*/j=1;while(!done){if (f.ff_attrib!=0x10) /* 若文件属性不是目录 */printf(\n %15s %20ld,f.ff_name,f.ff_fsize);elseprintf(\n &11s ,f.ff_name);num++;j++;if(j==23)printf(\n --------More (按任意键继续)----);getch();j=0;printf(″\n (目录路径%s)″,path2);}done=findnext(&f); /*查找下一个配匹的文件*/}printf(″\n 当前目录中总共有%d个文件.\n″,num);如何加快C++代码的编译速度C++代码一直以其运行时的高性能高调面对世人,但是说起编译速度,却只有低调的份了。
C语言命令行参数解析函数在C语言中,命令行参数是在程序启动时从命令行中传递给程序的参数。
这些参数可以用来指定程序的行为,例如传递文件名、启用一些功能等。
C语言通过main函数的参数来获取命令行参数,通过解析这些参数可以实现参数的验证、处理等功能。
C语言的main函数定义如下:```cint main(int argc, char *argv[])```其中,argc表示命令行参数的个数,argv是一个指向指针数组的指针,每个指针都指向一个字符串,即命令行参数的值。
命令行参数的格式一般为 `程序名参数1 参数2 ...` ,参数与参数之间使用空格或制表符分隔。
例如:`./myprogram -f filename.txt -l`。
为了更方便地解析命令行参数,可以编写一个解析函数来处理。
下面是一个简单的命令行参数解析函数的实现:```c#include <stdio.h>#include <string.h>void parseArguments(int argc, char *argv[])for (int i = 1; i < argc; i++)//判断当前参数是否为选项if (argv[i][0] == '-')//处理选项switch (argv[i][1])case 'f'://参数以选项后的字符串形式存在printf("文件名:%s\n", argv[i+1]);i++;//跳过下一个参数break;case 'l':printf("启用l选项\n");break;case 'h':printf("启用h选项\n");break;default:printf("未知选项:%c\n", argv[i][1]); break;}}else//处理非选项参数printf("参数:%s\n", argv[i]);}}int main(int argc, char *argv[])parseArguments(argc, argv);return 0;```上述函数中,首先通过一个for循环遍历命令行中的所有参数。
main函数的输入参数main函数是一个程序的入口函数,一般用于执行程序的初始化操作,并从命令行或其他地方获取输入参数,然后调用其他函数或模块来完成具体的任务。
main函数的输入参数可以有多种形式,下面是常见的几种形式及其使用方法的相关参考内容。
1. 使用命令行参数:命令行参数是在终端中运行程序时通过命令行传递给程序的参数。
在C/C++程序中,可以通过main函数的参数列表来获取命令行参数的值。
一般情况下,main函数的参数列表包括两个参数,分别是argc和argv,其中argc表示命令行参数的个数,argv是一个指针数组,其中每个元素指向一个字符串,表示相应的命令行参数。
示例代码如下:```c++int main(int argc, char* argv[]) {// 使用命令行参数进行操作for (int i = 0; i < argc; i++) {printf("命令行参数[%d]: %s\n", i, argv[i]);}return 0;}```参考内容:- 严蔚敏,《数据结构(C语言版)》(第2版)第一章,清华大学出版社2. 使用环境变量:环境变量是操作系统提供的一种机制,用于存储全局的配置信息。
在C/C++程序中,可以通过操作系统提供的接口函数来获取环境变量的值。
一般情况下,环境变量的名称和值都是以字符串的形式存储的。
示例代码如下:```c++#include <stdlib.h>int main() {// 使用环境变量进行操作char* username = getenv("USERNAME");if (username != NULL) {printf("当前登录用户名:%s\n", username);}return 0;}```参考内容:- 《C和指针》(第2版)第九章,中国电力出版社3. 使用配置文件:配置文件是一种用来存储程序运行时的配置信息的文本文件,一般以键值对的形式存储。
c语⾔main函数参数说明转载int main(int argc, char* argv[])argc是命令⾏参数的个数(程序路径⾃⾝也是⼀个参s数),argv字符指针数组中就保存了指向各个参数字符串的指针(程序路径是第⼀个参数,由argv[0]指向)。
⽐如⼀个main.c⽂件⾥⾯的main函数定义如上所⽰,那么当在命令⾏模式下执⾏main.c⽣成的main.exe⽂件时,格式如下:main.exe aaa bbb ccc那么:argc=4argv[0]="main.exe"argv[1]="aaa"argv[2]="bbb"argv[3]="ccc"====================================#include <stdio.h>int main(int argc, char* argv[]){int i;for (i = 0; i<argc; i++) {puts(argv[i]);}return 0;}====================================如果这个程序⽣成的可执⾏⽂件名为main.exe,并以命令⾏的⽅式执⾏命令“main.exe aaa bbb ccc”,那么会输出:main.exeaaabbbccc另外,main()函数可以有第三个参数,也是⼀个字符指针数组,这个数组中保存了指向保存当前系统中的环境变量字符串的指针,例如以下程序可以输出系统中定义的环境变量:=========================================#include <stdio.h>int main(int argc, char* argv[],char *env[]){int i;for (i = 0; env[i]; i++) {puts(env[i]);}return 0;}=======================================我的电脑上执⾏上⾯的程序输出是:PATHEXT=.COM;.EXE;.BAT..................................... PROCESSOR_ARCHITECTURE=x86 ....................。
C语⾔讲解命令⾏参数命令⾏(command line):是在命令⾏环境中,⽤户为运⾏程序输⼊命令的⾏。
命令⾏参数(command-line argument):是同⼀⾏的附加项。
C编译器允许main()没有参数或者有两个参数第⼀个参数:argc(argument count)参数计数,是⼀个整数第⼆个参数:argv(argument value)参数值,是⼀个指针数组系统⽤空格表⽰⼀个字符串的结束和下⼀个字符串的开始。
例如在命令⾏下输⼊:repeat Resistance is futile包括命令名repeat在内有4个字符串,其中后3个供repeat使⽤,即参数。
这时候argc是4。
argv依次存储3个参数的字符串地址。
1 #include <stdio.h>23int main(int argc,char *argv [])4 {5int count;67 printf("The command line has %d arguments:\n",argc-1);8for(count =1;count <argc;count++)9 printf("%d: %s\n",count,argv[count]);10 printf("\n");1112return0;13 }编译为可执⾏⽂件repeat,下⾯是通过命令⾏运⾏该程序后的输出:C>repeat Resistance is futileThe command line has 3 arguments:1: Resistance2: is3: futile参数声明时候也会⽤到:char **argv;char **argv与char *argv [] 等价;但是char *argv []更能清晰地表⽰⼀系列字符串;。
C语言main函数的使用方法C语言main函数里的参数使用方法在学C语言的时候,我们也许常常见到int main(int argc,char* argv[])的写法,但是不知道这个argc和argv[]是干什么的,书上也没有讲到。
接下来我们来学习一下这两个参数的使用。
main()函数是C语言控制台应用程序的入口函数,就是程序启动时运行的第一个函数,既然是函数,就可以带参数,也可以不带。
我们学C语言的时候,书上的例子都是不带参数的main函数,有关参数的输入都是在程序启动后,用其他函数来执行的。
比如求两个数的最大值,一般的写法是:int max(int a,int b){if(a>=b)return a;else return b;}int main(){int a,b;scanf("%d%d",&a,&b);printf("the max num is:%d",max(a,b));return 0;}这样在程序启动之后,再输入两个数,然后输出最大值。
然而控制台应用程序以前都是在CMD或DOS命令行下进行调用的,在调用这个程序的时候,人们想直接在程序名后面跟上要输入的参数,这样程序一运行就能输出结果,而不需要在程序启动后再输入各参数,所以需要用到带参数的main函数。
main函数里的形参是固定的格式,系统给我们规定好了,就是main(int argc,char* agrv[])两个形参,argc这个形参是用来记录程序启动时就传入的实参个数,argv[]这个形参是字符指针数组,用来记录每个实参的地址的。
例如:(程序名称为test.exe)在VC++6.0或VS里运行一下,结果如下:因为它是直接就运行了,没有在程序名后跟上参数,所以argc为1,就是程序本身的名称(包含路径)。
argv[0]就指向程序名这个字符串。
在CMD命令行里先cd到该程序所在的目录,然后调用它,在程序名后跟上几个参数,然后回车。
c语言main函数参数main函数参数是C语言中最常见的函数参数类型之一。
在C语言中,main函数是程序的入口,是程序执行的第一个函数。
main函数的参数可以用来接收外部传入的数据,这些数据可以用来控制程序的执行,或者用来传递程序所需要的参数。
在C语言中,main函数有两个参数,分别是argc和argv。
argc 表示命令行参数的个数,argv是一个指针数组,每个元素指向一个命令行参数的字符串。
下面我们来详细介绍一下这两个参数的用法。
一、argc参数argc表示命令行参数的个数,它是一个整型变量。
在C语言中,命令行参数是指在程序启动的时候从外部传入的一些参数,这些参数可以用来控制程序的执行,或者用来传递程序所需要的参数。
命令行参数的个数取决于用户在启动程序时输入的参数个数。
二、argv参数argv是一个指针数组,每个元素指向一个命令行参数的字符串。
在C语言中,命令行参数是以字符串的形式传递给程序的。
在程序中,可以通过argv参数来获取这些参数的值,进而控制程序的执行。
三、使用示例下面我们来看一个简单的示例,说明如何使用main函数的参数。
```c#include <stdio.h>int main(int argc, char *argv[]){int i;printf("argc=%d\n", argc);for (i = 0; i < argc; i++) {printf("argv[%d]=%s\n", i, argv[i]);}return 0;}```在这个示例中,我们定义了一个main函数,它接收两个参数,argc和argv。
在函数中,我们首先打印出命令行参数的个数,然后遍历命令行参数数组,依次打印出每个参数的值。
我们可以在命令行中输入以下命令来执行这个程序:```./a.out hello world!```执行结果如下:```argc=3argv[0]=./a.outargv[1]=helloargv[2]=world!```从结果可以看出,argc参数的值为3,表示命令行参数的个数为3。