C语言编程实战-4-命令行参数(main函数)处理

合集下载

c语言main函数使用及其参数介绍

c语言main函数使用及其参数介绍

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")。

C命令行参数

C命令行参数
int main( int argc, char *
argv[] ) {
if( argc == 2 )
{
printf(&quot;The argument supplied is %s\n&q argc &gt; 2 )
C 命令行参数
执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作: #include &lt;stdio.h&gt;
{
printf(&quot;Too many arguments supplied.\n&quot;);
}
else
{
printf(&quot;One argument expected.\n&quot;);
}}
使用一个参数,编译并执行上面的代码,它会产生下列结果:
使用两个参数,编译并执行上面的代码,它会产生下列结果:
不传任何参数,编译并执行上面的代码,它会产生下列结果:
应当指出的是,argv[0] 存储程序的名称,argv[1] 是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。

main函数与命令行参数

main函数与命令行参数

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语言程序设计技巧之命令行参数在许多应用软件运行时都带有命令行参数,其实这些命令行参数在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语言命令行参数解析函数在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函数的输入参数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函数参数说明转载

c语言main函数参数说明转载

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语言讲解命令行参数

C语言讲解命令行参数

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语言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函数参数

c语言main函数参数

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。

c命令行参数的用法

c命令行参数的用法

c命令行参数的用法(原创实用版)目录1.引言2.c 命令行参数的基本语法3.常用 c 命令行参数及其用法4.示例5.结语正文1.引言在计算机编程中,命令行参数是指在命令行界面中输入的参数,通常用于向程序传递数据或指示程序执行特定的操作。

c 语言是一种广泛使用的编程语言,其命令行参数的用法对于编程者来说十分重要。

本文将为您介绍 c 命令行参数的基本语法和常用参数及其用法。

2.c 命令行参数的基本语法c 语言中的命令行参数可以通过`main()`函数的参数`argc`和`argv`数组来获取。

`argc`表示命令行参数的个数,`argv`是一个字符串数组,其中`argv[0]`是程序名,`argv[1]`、`argv[2]`等分别表示传递给程序的各个参数。

3.常用 c 命令行参数及其用法以下是一些常用的 c 命令行参数及其用法:- `-n`或`--number`:指定一个整数参数,例如:`test -n 5`表示传递给程序一个整数参数 5。

- `-s`或`--string`:指定一个字符串参数,例如:`test -s "helloworld"`表示传递给程序一个字符串参数"hello world"。

- `-f`或`--file`:指定一个文件参数,例如:`test -f example.txt`表示传递给程序一个文件参数 example.txt。

- `-i`或`--input`:指定程序的输入来源,例如:`test -i stdin`表示程序的输入来源是标准输入(键盘输入)。

- `-o`或`--output`:指定程序的输出去向,例如:`test -o output.txt`表示程序的输出将保存到名为 output.txt 的文件中。

4.示例以下是一个简单的 c 程序,该程序接收两个命令行参数,一个整数参数和一个字符串参数:```c#include <stdio.h>int main(int argc, char *argv[]) {int num = atoi(argv[1]);char *str = argv[2];printf("The number is %d, and the string is %s.", num, str);return 0;}```编译并运行该程序时,您可以通过如下命令传递参数:```bashgcc test.c -o test./test -n 5 -s "hello world"```输出结果为:```The number is 5, and the string is hello world.```5.结语通过本文的介绍,您应该已经了解了 c 命令行参数的基本语法和常用参数及其用法。

c命令行参数的用法

c命令行参数的用法

c命令行参数的用法C命令行参数的用法C语言是一种广泛使用的编程语言,而在C语言中,命令行参数是一种非常重要的概念。

命令行参数是指在程序运行时,通过命令行传递给程序的参数。

在C语言中,通过main函数的参数列表来获取命令行参数。

在C语言中,main函数的原型通常是这样的:int main(int argc, char*argv[])。

其中,argc表示命令行参数的个数,而argv则是一个指向字符串数组的指针,每个字符串表示一个命令行参数。

通过命令行参数,我们可以向程序传递各种信息。

比如,我们可以将文件名作为命令行参数传递给程序,这样程序就可以根据文件名来读取相应的文件。

另外,我们还可以传递一些选项参数,用来控制程序的行为。

比如,我们可以传递"-h"选项来显示程序的帮助信息,或者传递"-v"选项来显示程序的版本号。

在程序中,我们可以通过遍历argv数组来访问命令行参数。

通常情况下,argv[0]表示程序的名称,而argv[1]、argv[2]等依次表示命令行参数。

我们可以使用循环结构来遍历整个argv数组,从而获取所有的命令行参数。

除了使用命令行参数,我们还可以使用getopt函数来解析命令行参数。

getopt函数是一个标准库函数,可以帮助我们处理复杂的命令行参数。

通过getopt函数,我们可以轻松地处理选项参数和参数值,而不需要手动编写解析代码。

总而言之,C命令行参数是一种非常有用的功能,可以帮助我们向程序传递信息,并控制程序的行为。

通过命令行参数,我们可以轻松地扩展程序的功能,使其更加灵活和易用。

因此,在C语言的开发中,我们应该充分利用命令行参数的功能,提升程序的质量和用户体验。

希望本文能够帮助你理解C命令行参数的用法,并在实际开发中加以应用。

通过灵活运用命令行参数,我们可以编写出更加强大和实用的程序,为用户带来更好的使用体验。

C语言命令行简明教程

C语言命令行简明教程

C语言命令行简明教程C语言作为一种被广泛应用于系统开发、嵌入式领域以及科学计算等领域的编程语言,具有高效、灵活和强大的特点。

其中,命令行编程是C语言最常用的方式之一。

本教程将向您介绍C语言命令行编程的基础知识和常用方法。

一、什么是命令行编程在计算机编程中,命令行编程是指通过命令行界面(Command Line Interface)输入指令和参数来与计算机进行交互的一种编程方式。

C语言提供了与命令行交互的函数和库,方便程序员开发各种应用程序。

二、命令行参数的获取在C语言中,通过main函数的参数来获取命令行参数。

main函数的原型如下:```int main(int argc, char *argv[])```其中,argc表示命令行参数的数量,argv是一个指向字符串数组的指针,每个字符串表示一个命令行参数。

下面是一个示例:```c#include <stdio.h>int main(int argc, char *argv[])int i;for(i=0; i<argc; i++){printf("参数%d: %s\n", i, argv[i]);}return 0;}```在上面的示例中,我们使用了一个循环来遍历所有命令行参数,并通过printf函数将其输出到屏幕上。

三、标准输入输出C语言提供了标准输入输出库(stdio.h),可以通过命令行进行输入输出操作。

常用的函数包括printf、scanf和getchar等。

1. printf函数printf函数用于向屏幕输出内容。

下面是一个示例:```c#include <stdio.h>int main()int num = 10;printf("数字: %d\n", num);return 0;}```在上面的示例中,我们使用了printf函数将num的值输出到屏幕上。

2. scanf函数scanf函数用于从命令行获取输入,并将其存储到变量中。

C语言中的命令行参数

C语言中的命令行参数

C语言中的命令行参数命令行参数是指在命令行或终端窗口中传递给程序的参数。

在C语言中,我们可以通过命令行参数来向程序传递输入信息或设置程序的相关选项。

命令行参数在实际的编程工作中非常常见,可以提供灵活性和可配置性。

在本文中,我们将讨论C语言中的命令行参数的用法和相关注意事项。

1. 命令行参数的基本概念在C语言中,命令行参数是指在程序运行时传递给main函数的参数。

主函数的原型通常是这样的:```cint main(int argc, char *argv[])```其中,argc表示命令行参数的数量,即参数个数;argv是一个指向字符串数组的指针,每个字符串都代表一个命令行参数。

argv[0]通常是程序的名称或路径。

2. 传递命令行参数要传递命令行参数,我们只需在运行程序的命令行中将参数以空格分隔开即可。

例如,以下命令行将传递三个参数给程序:```./program arg1 arg2 arg3```其中"./program"是程序的名称,arg1、arg2、arg3是参数。

3. 使用命令行参数命令行参数在程序内部以字符串的形式使用。

我们可以通过遍历argv数组来逐个获取参数的值。

下面是一个简单的示例程序,演示如何使用命令行参数并将参数打印出来:```c#include <stdio.h>int main(int argc, char *argv[]) {int i;for (i = 0; i < argc; i++) {printf("Argument %d: %s\n", i, argv[i]);}return 0;}```4. 命令行参数的特殊情况有时候,我们需要在命令行中传递一些特殊字符或包含空格的参数。

在这种情况下,我们需要使用引号将参数括起来,或者使用反斜杠对特殊字符进行转义。

5. 命令行参数的选项设置命令行参数可以用于设置程序的选项或标志。

C语言main函数的参数

C语言main函数的参数

C语言main函数的参数C语言main函数的参数导语:main函数一般都是不带参数的,那么什么情况会带参数呢?让我们了解一下吧!一般main函数都是不带参数的。

因此main 后的括号都是空括号。

实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。

C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。

因此,main函数的函数头可写为:main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。

加上形参说明后,main函数的函数头应写为:main (argc,argv)int argv;char *argv[];或写成:main (int argc,char *argv[])由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。

那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。

当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。

DOS提示符下命令行的一般形式为: C:/>可执行文件名参数参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。

因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。

argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的'值是在输入命令行时由系统按实际参数的个数自动赋予的。

例如有命令行为:C:/>E6 24 BASIC dbase FORTRAN由于文件名E6 24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。

argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。

指针数组的长度即为参数个数。

C语言main函数的参数及其返回值详细解析

C语言main函数的参数及其返回值详细解析

C语⾔main函数的参数及其返回值详细解析main函数的返回值⽤于说明程序的退出状态。

如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。

通常,返回⾮零代表程序异常退出。

下⾯我们在winxp环境下做⼀个⼩实验。

⾸先编译下⾯的程序:int main( void ){return 0;}然后打开附件⾥的“命令提⽰符”,在命令⾏⾥运⾏刚才编译好的可执⾏⽂件,然后输⼊“echo%ERRORLEVEL%”,回车,就可以看到程序的返回值为0。

假设刚才编译好的⽂件是a.exe,如果输⼊“a && dir”,则会列出当前⽬录下的⽂件夹和⽂件。

但是如果改成“return -1”,或者别的⾮0值,重新编译后输⼊“a && dir”,则dir不会执⾏。

因为&&的含义是:如果&&前⾯的程序正常退出,则继续执⾏&&后⾯的程序,否则不执⾏。

也就是说,利⽤程序的返回值,我们可以控制要不要执⾏下⼀个程序。

这就是int main的好处。

如果你有兴趣,也可以把main函数的返回值类型改成⾮int类型(如float),重新编译后执⾏“a && dir”,看看会出现什么情况,想想为什么会出现那样的情况。

顺便提⼀下,如果输⼊a || dir的话,则表⽰如果a异常退出,则执⾏dir。

----------------------分割线--------------------通过操作系统来看返回值是通⽤⽅式不过也可以通过程序⾃⼰显⽰程序代码如下(只⽤到标准C⾥⾯的内容)#include#includeint code;void my_exit (void){printf ("retrun value is %d\n", code);}int main (void){atexit (my_exit);return code = 0; //或者其他的返回值因为code = 0表达式的结果是code的值然后把这个值传给 return 所以跟return 0是⼀样的效果只是多了个附作⽤就是给code赋值好输出}不要觉得这⾥和直接打印0有什么区别⾃⼰看atexit函数是⼲什么吧对你学习main也有帮助的----------------------分割线--------------------只是单纯举个例⼦,递归调⽤main的例⼦,没有实际意义int num=3;//全局变量int main(){num--;int i=10;if(num>=0)int i=main();//递归调⽤main()return 0;}设置断点以后调试可以看到i值的变化情况在⾮递归调⽤main()的程序中,exit(0)和return 0;的⽤途是⼀样的,但是在递归调⽤main的程序中,exit(0)可以结束程序,⽽return 0;是结束当前main函数----------------------分割线--------------------很多⼈甚⾄市⾯上的⼀些书籍,都使⽤了void main( ) ,其实这是错误的。

C++main函数命令行参数使用

C++main函数命令行参数使用

C++main函数命令⾏参数使⽤1. C/C++语⾔中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv)int main(int argc, char* argv[])C语⾔还规定argc(第⼀个形参)必须是整型变量,argv( 第⼆个形参)必须是指向字符串的指针数组。

加上形参说明后,main函数的函数头应写为:main (int argc,char *argv[])2. 由于main函数不能被其它函数调⽤,因此不可能在程序内部取得实际值。

那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从命令⾏上获得的。

如何在操作系统命令⾏获取参数呢?(1)在VS中设置时右键项⽬->属性->调试->命令参数,在命令参数中添加所需参数,字符串之间⽤空格分开即可。

如果是.txt⽂件,要放在当前⽬录下(.cpp所在⽬录),不然找不到。

(2)或者:假如你的程序是hello.exe,如果在命令⾏运⾏该程序,(⾸先应该在命令⾏下⽤ cd 命令进⼊到 hello.exe ⽂件所在⽬录)运⾏命令为:01. hello.exe data.txt //.txt也在.exe所在⽬录下但是应该特别注意的是,main 的两个形参和命令⾏中的参数在位置上不是⼀⼀对应的。

因为,main的形参只有⼆个,⽽命令⾏中的参数个数原则上未加限制。

argc参数表⽰了命令⾏中参数的个数(注意:⽂件名本⾝也算⼀个参数),argc的值是在输⼊命令⾏时由系统按实际参数的个数⾃动赋予的。

3. 举例:在调⽤⼀个可执⾏程序时,某些情况下需要向程序传递参数。

如我们可以在控制台中键⼊notepad.exe,回车后将执⾏记事本程序。

如果我们希望在打开notepad时同时打开⼀个⽂本⽂件,可以在notepad.exe后⾯跟上⽂件的路径和名字,如notepad.exe example.txt(⽂件在当前路径)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果执行:
test arg1arg2
则main函数得到的参数是:argc = 3, argv = {“test”,“arg1”,“arg2”};
如此类推。
通过上面的讲解,我们不难在main函数中实现对命令行参数的代码。我们接下来做一个编程任务:
写一个程序,该程序接收两个参数,这两个参数都是整数,程序中需将这两个整数的和与差计算并输出到屏幕上。假设程序的名称为cal,在命令行执行:
cal 10 15
则程序输出:
10 + 15 = 25
10–15= -5
如果输入的参数不合法,则提示参数错误。
代码实现:
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc != 3)
{
printf("参数错误!\n");
}
else
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
printf("%d + %d = %d\n", a, b, a + b);
printf("%d - %d = %d\n", a, b, a - b);
}
return 0;
}
在主函数的第一行,我们先对命令行传入的参数个数进行检查,因为cal命令行程序有两个参数,加上程序名称本身,参数个数应该为3才合法,所以当参数个数不为3时,肯定是非法,程序打印错误并退出(注意:示例程序中没有实现对参数格式的检查,如argc=3,但传入的参数不是合法的整数,这需要用户自行去添加代码实现)。如果参数正确,则从命令行获取参数,其对应的代码为:
一个标准的C程序,其主函数通常是这样子定义的:
int main(intargc,char *argv[])
{
//用户代码
return xxx;
}
main函数有两个参数:argc与agv,前者是一个整数,表示命令行给程序参数的个数,后者是一个字符串数组,用于顺次存放命令行传给程序的参数,通过argc与argv,我们就能实现对命令行参数的处理。
通过上面的讲解,我们已经能够处理命令行参数了,如cal程序的argv[1]与argv[2]。那么argv[0]有什么用呢?对于很多程序而言,argv[0]没有必要处理,除非你的代码真的需要判断自己的命令行程序名。如同一份代码实现了两个功能,编译连接生成程序后,将程序复制成两份,一份命名p1,一份命名p2,p1中执行功能1,p2中执行功能2,这时程序就要对argv[0]进行判断,用于选择执行不同的功能。使用argv[0]区分运行功能最著名的程序是busybox,在Linux系统中,我们有一个busybox程序,它在一个程序中集成了所有bash命令,同时以链接的方式生成ls, ps, top, ifconfig等这么一系列的命令,我们执行ls,实际上是运行了busybox,只是这时候busybox主函数得到的argv[0]是”ls“,因此busybox程序就能正常跳到ls功能代码运行。
命令行(main函数)参数处理
我们在执行某某命令的时候,经常会传入一些参数,告诉程序做不同的处理。如使用gcc编译程序时,我们经常会在后边指定c源码文件,如gcc test.c。我们自己写的程序,如何能够算其它命令一样,能够接收和处理不同的参数呢?答案是肯定的。我们今天来介绍自写程序对命令行参数的处理。
int a = atoi(argv[1]);
int b = atoi(argv[2]);
很明显,我们代码获取命令行参数的时候,第一个参数取的是argv[1],第二个是argv[2],跳过了argv[0],因为argv[0]是程序名称,我们这里用不到。由于参数是ቤተ መጻሕፍቲ ባይዱ字符串形式传入的,所以我们使用了atoi对其进行了转换,atoi的作用是将字符串转化成数字,如将字符串“123”转化成数字123。
对每一个程序而言,程序的名称总会作为命令行的第一个参数传给它的主函数,那怕命令行中并没有传任何参数。因此,主函数的参数argc最小值为1,argv[0]总是存放命令程序名。因此,假使test是我们程序的名字,如果执行:
test
则main函数得到的参数是:argc = 1, argv = {“test”};
相关文档
最新文档