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

C语言中的main函数接受三个参数:argc, argv和envp。argc表示argv数组中指针元素的个数,argv则存储命令行传入的内容地址,其中argv[0]是程序自身路径。envp保存系统环境变量的字符串数组,以NULL结束,可用于获取和修改环境变量。虽然envp用得较少,但它在需要参考或恢复环境变量的场景下显得尤为重要。" 109938426,10295160,Abaqus开孔接触模拟及应力集中分析,"['有限元分析', '结构力学', 'abaqus开孔接触', '接触问题', '应力分析']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中的数据将环境变量恢复到程序执行前的设置。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值