main函数——命令行参数与环境变量

main函数,是以C为基础开发平台的程序入口点,通常,我们写程序很少去关注函数main函数参数列表,而是简单给出下面这种情况。

int main()
{
 system("pause");
 return 0;
}

打开MSDN,查看main函数,

main( int argc, char *argv[ ], char *envp[ ] )
{
program-statements
}

首先,我们先来看前两个参数,argc和 argv[ ],这两个主要是用来描述命令行参数的,但并不能说他们是命令行参数,对一个程序而言,它们表示的是main函数的形参。(有点绕)

举个例子,打开cmd,如下图

我们输入hello.exe,表示这是一个可执行程序,后面我们可以跟上一些参数,-m,2,1等,参数在这里没有什么实际意义,但如果我们提前写好了hello.exe,之后我们加上的参数,都是可以获取到的,那我们这里加上的这些参数,就是所谓的命令行参数,和main函数的参数是两回事。

那在cmd下可以运行,在外部环境下怎么去设置环境变量呢?

打开VS编译器,项目----->属性---->调试

在这里,我们可以提前设置好命令行参数。

argc和argc[ ]就是用来调整这些参数的,它们可以获取到我们设置的命令行参数

其中,argc表示的是参数的个数,对程序而言,去识别命令行参数时,都是当做字符串来识别,而argv[]是一个字符指针数组,数组的每个元素都是char*类型的,指向的就是我们的命令行参数的各个参数,数组名为argv。

还是上面的例子,我们的argc值为4,而argv[]中共有五个char*类型的元素,分别为"hello.exe","-m","2","1",最后还存放了一个NULL。argc里面是NULL之前的参数个数。

那我们就可以通过数组下标的方式  argv[i]  来访问到我们的命令行参数的内容,再去实现我们的功能。通常,一般会在程序最开始对argc进行判断,是否满足我们接下来要访问的参数个数,如果小于我们所需最少的参数个数,程序往往会奔溃。

另外需要强调的一点,还是,这几个参数只是形参,名字并不是固定的,可以去改变它,只是我们通常这样来理解。

很明显,我们每次需要实现一个操作,都需要跑到工程----->属性下面去改命令行参数,这并不是我们想要的,但命令行参数确实是很重要的,这主要体现在cmd环境下。

在cmd环境下找到我们刚刚建的工程,Debug下找到刚刚的可执行程序(后缀为.exe),在它后面跟上我们的参数,点击回车,参数就会被获取到,就会出现我们想要的结果。

再举个简单的例子,fcopy.exe 是实现文件复制的可执行程序文件,在命令行方式运行fcopy格式:

系统提示符 + fcopy.exe in.dat out.dat

in.dat”和“out.dat”是命令行参数,其中,“in.dat ”和“out.dat”前均可带盘符和查找路径。

关于环境变量

简单地说就是“Path”是一个变量,里面存储了一些常用命令所存放的目录路径。跟DOS的默认路径相似,当吧目录添加到Path下之后,运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路径中去查找。

比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录下面寻找此程序外, 还应到哪些目录下去寻找。

一般情况下,看不出环境变量有什么意义,但学习过Java的应该都知道,eclipse安装之后是要配置环境变量的,也就是把bin目录给复制过去,具体是为什么,这里就不多解释了。环境变量能解决的另一个大问题,就是双系统的软件共用问题。例如分别在C盘和D盘安装win7和xp的系统,但有些软件却只在某个系统下安装,另一个系统下往往不能使用,比较麻烦的办法就是在另个平台下再安装一遍。

为什么在某个系统下安装的软件在另外一个系统打不开呢?原因是安装软件时往往须要向系统目录中复制某些文件,而使用另外一个系统时会由于缺少这些文件而无法运行。环境变量则可以很好的解决这个问题。

查看环境变量,可以通过我的电脑-〉属性-〉高级,来设置系统的环境变量,然而在此设置的环境变量是否在注册表中具有对应的项呢?答案是肯定的。

关于这方面内容,目前还只是简单有过了解,想深入了解的话,这里推荐两个网址,供大家学习

定义环境变量:

http://book.2cto.com/201309/33403.html

shell中的环境变量和自定义变量

http://edsionte.com/techblog/archives/3389

时间: 2024-10-31 05:37:57

main函数——命令行参数与环境变量的相关文章

c/c++ main 函数命令行参数的使用

C程序最大的特点就是所有的程序都是用函数来装配的.main()称之为主函数,是所有程 序运行的入口.其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv)int main(int argc, char* argv[])从函数参数的形式上看,包含一个整型和一个指针数组.当一个C/C++的源程序经过编译.链接后,

Linux环境编程之进程(一):main函数调用、进程终止以及命令行参数和环境表

(一)main函数调用 main函数作为程序运行时的入口函数,它是如何被调用的呢?首先必须清楚一点,main函数也是一个函数,它只有被调用才能够执行.其实,在执行可执行程序时,在调用main函数之前,内核会先调用一个特殊的启动例程,将此启动例程作为可执行程序的起始地址.启动例程是如何作为可执行程序的起始地址的?这是由链接编译器设置的,而链接编译器则是由C编译器(如gcc编译器)调用的.启动例程作为可执行程序的起始地址主要做哪些工作呢?启动例程从内核取得命令行参数和环境变量值,以此来为main函数

Jmeter命令行运行配置环境变量

Jmeter命令行运行配置环境变量 在打开jmeter GUI界面时会弹出cmd命令窗口提示:压测时不要用GUI,要用命令行 在cmd命令行里面运行jmeter的话,需要配置jmeter环境变量,下面开始配置jmeter环境变量: 下载完成后 如图我保存到    D:\apache-jmetes\apache-jmeter-4.0  开始配置环境变量: (1)“我的电脑”>鼠标右键菜单>"属性">"高级系统设置">"环境变量&quo

Linux命令行--使用linux环境变量(转)

5.1 什么时环境变量 bash shell用一个成为环境变量的特性来存储有关的shell回话和工作环境的信息,这是它们成为环境变量的原因.它允许你在内存中存储数据,以便运行在账户.系统.shell的特性以及任何其他你需要存储的数据 环境变量的分类 全局变量 局部变量 5.1.1 全局环境变量 全局环境变量不仅对shell会话可见,而且对所有shell创建的子进程也可见,局部变量只是对创建的他们的shell可见 这对全局环境变量对那些子进程中需要获得父进程信息的程序来说非常有用 系统环境变量一律

mysql简单命令行操作以及环境变量的配置

1.配置环境变量 - 找到mysql的bin目录,配置到环境变量path下. 2.简单的命令行操作 -1.登录: mysql -hlocalhost(-h后面跟数据库ip地址) -uroot(-u后面跟user名) -p(密码) -2.退出: exit -3.数据库操作: -1.建库:create database mydb; -2.删库:drop database mydb; -3.显示所有的数据库:show databases; -4.选择库(选择要使用的数据库):use mydb; -4.

shell和命令行参数有关的变量

$0 ----- 当前程序的名称,实际上是一个内部参数,不同于$1,$2....因为它必须有! $# ---- 传递给程序的总的参数数目,也就是那个传说中的数组大小 $? ---- 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值. $* ---- 传递给程序的所有参数组成的字符串. [email protected] 以"参数1" "参数2" ... 形式保存所有参数 $$ ---- 本程序的(进程id号)pid $! --

聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数] 较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源,如果采用物理文件作为配置源,我们可以选择不同的格式(比如XML.JSON和INI等) .如果这些默认支持的配置源形式还不能满足你的需求,我们还可以通过注册自定义ConfigurationSour

.NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源,如果采用物理文件作为配置源,我们可以选择不同的格式(比如XML.JSON和INI等) .如果这些默认支持的配置源形式还不能满足你的需求,我们还可以通过注册自定义ConfigurationSource的方式将其他形式数据作为我们的配置来源. [ 本文已经同

c语言中命令行参数argc,argv[ ]

main(int argc,char *argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[] or: char argv[][] main()括号内是固定的写法. 下面给出一个例子来理解这两个参数的用法: 假设程序的名称为prog, 当只输入prog,则由操作系统传来的参数为: argc=1,表示只有一程序名称. argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog 当输入prog para_1,有一个参数,则由操