加入后院 登录
工大后院 返回首页

anlogo的个人空间 https://www.gdutbbs.com/?19366 [收藏] [复制] [分享] [RSS]

日志

关于main函数的参数的浅谈

已有 589 次阅读2009-1-21 13:03 |个人分类:C++话题|

 
来看一个小程序: [注意]如果还不懂main函数参数,请看附件解说
 #include <stdio.h>
 main(int argc,char *argv[],char *env[])
  {
  int   i;
  printf("\nThese are the %d command-line arguments passed to main:\n",argc);
  for(i=0;i &lt; =argc;i++)  [注意] 此处"&lt;"本为小于号
  printf("argv[%d]:%s\n",i,argv[i]);
  printf("The environment strings on this system are:\n");
  for(i=0;env[i]!=NULL;i++)
  printf("env[%d]:%s\n",i,env[i]);  
  }  
[TC编译通过]
生成example.exe程序,使用cmd带命令输入: example this is "a program" 120
输出结果:
These are the 5 command-line arguments passed to main:
argv[0]:H:\TCTEMP\001.EXE
argv[1]:this
argv[2]:is
argv[3]:a program
argv[4]:120
argv[5]:(null)
The environment string(s)on this system are:
   env[0]:COMSPEC=C:\WINDOWS\SYSTEM32\COMMAND.C0M   
   env[1]:ALLUSERSPROFILE=C:\DOCUME~1\ALLUSE~1
   env[2]:APPDATA=C:\DOCUME~1\ADMINI~1\APPLIC~1
   env[3]:CLIENTNAME=Console
   env[4]:COMMONPROGRAMFILES=C:\PROGRA~1\COMMON~1
   env[5]:COMPUTERNAME=WWW-C72A54B1D36
   env[6]:FP_NO_HOST_CHECK=NO
   env[7]:HOMEDRIVE=C:
   env[8]:HOMEPATH=\Documents and Settings\Administrator
   env[9]:LOGONSERVER=\\WWW-C72A54B1D36
  
......[略]
 
 
[附件1]
首先,main()函数既可以是无参函数,也可以是有参的函数。对于有参的形式来说,就需要向其传递参数。但是其它任何函数均不能调用main()函数。当然也同样无法向main()函数传递,只能由程序之外传递而来。这个具体的问题怎样解决呢?
我们先看一下main()函数的带参的形式:
main(argc,argv)
int argc,char *argv[];
{
.....
}
从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。
其格式为:命令 参数1 参数2 .... 参数n  
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系:
设命令行为:program s1 s2 s3 s4 s5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char *argv[6],数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。
 
[附件2]
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[]的情况。
 
 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 加入后院

Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-5-1 06:07

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

返回顶部