【C命令行参数】main函数的参数含义

来源:互联网 发布:苹果7为什么4g网络很慢 编辑:程序博客网 时间:2024/06/06 02:44

C中的命令行参数又叫位置参数,它可以被传到程序里面,派各种用途


我们先来看main函数的参数

int main( int argc, char *argv[ ], char *envp[ ] )
{

program-statements
}

 

main()函数的参数就是通过命令行来进行传参的;

vs2013传参方式:项目->属性->配置属性->调试->命令行参数,然后进行传参。

 

 

argc是指argv[]数组中指针元素的个数;通过下面程序可以验证。

#include<stdio.h>#include<windows.h> int main(int argc, char *argv[], char *envp){int i = 0;for (; i < argc; i++){printf("%d -> %s\n", i, argv[i]);}system("pause");return 0;}

 

 

 

argv存放的是通过命令行传进来的一个个内容的地址,但除过argv[0],通过下面程序可以发现arg[0]里面存放的是当前运行程序的地址,还有argv最后一个数组里面存放的是NULL;

#include<stdio.h>#include<windows.h> int main(int argc, char *argv[], char *envp){int i = 0;for (; argv[i]; i++){printf("%d -> %s\n", i, argv[i]);}system("pause");return 0;} 

 

 

envp里存放正是系统的环境变量

MSDN上是这样解释的:

#1:许多UNIX操作系统中普遍扩展了对envp数组的支持;

#2:它保存这用户环境中的变量字符串,以NULL结束。正因此,本文上面的例子用if(envp[i])来判断是否打印完毕;

#3:envp可以是char*[]类型也可以是char**类型,本文上面的例子使用的是前者;如果使用宽字符集,则应使用wmain代替main,并使用wchar*[]或wchar**类型的envp。本文上面的例子使用tchar.h,使用了通用文本编程;

#4:envp一旦传入,它就只是单纯的字符串数组而已,不会随着程序动态设置发生改变。可以使用putenv函数实时修改环境变量,也能使用getenv实时查看环境变量,但是envp本身不会发生改变;

#5:这个版本对ANSI C兼容,但对ANSI C++不兼容。

envp用的不多,因此对它的作用并没有argc和argv那样清楚的理解。不过依据它的表现,笔者能够想到的到envp的作用有两点:

1)为程序提供参考:程序的运行过程中需要参考环境变量作出决定,比如安装程序必须知道系统默认的ProgramFiles,它可以通过envp查看到本系统的程序文件夹在ProgramFiles=C:\Program Files,于是默认安装目录就设置定为C:\ProogramFiles;

2)如果程序在运行过程中对环境变量做了修改,在它退出时想要恢复,这时就可以参照envp中的数据将环境变量恢复到程序执行前的设置。

 

0 0
原创粉丝点击