`
jgsj
  • 浏览: 960744 次
文章分类
社区版块
存档分类
最新评论

C++ main()函数及参数

 
阅读更多

转自:http://blog.csdn.net/veiny/article/details/784757

main()函数及其参数
C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是一些惯例:
int main(int argc, char *argv[])
第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1] 。 例如, 如果程序名称为main,并且已经事先编译好了,这时如果用户键入:
D:/MyPrograms/AConsoleApp/main 68

值68将会传递给argv[1]
当然取决于你怎么样来编写程序了,也许你的用户将可以输入如下指令:
D:/MyPrograms/AConsoleApp/main 68 1250.50
因为参数argv是一些字符串,将这些字符串转换为你需要的值就是我们程序员的任务了。所以用户输入下面这样的指令:
D:/MyPrograms/AConsoleApp/main 68 1250.50
并不意味着68是一个整形,而1250.50是一个double,当然C/C++编译器为我们提供了一些转换函数,你可以用atoi()函数把字串68转换为整形。同样,你可以用atof()函数把字串1250.50转换为double类型
如果用户输入一个字符,值将用单引号,如果是字符传将用双引号。用这种技术,用户将被允许使用数字、字符及字符串作为程序的参数来运行程序。

1 为了演示在主函数main()中使用数字参数,改变上例代码如下:
#include
using namespace std;
int main(int argc, char *argv[])
{
double Operand1, Operand2, Addition;

Operand1 = atoi( argv[1] );
Operand2 = atoi( argv[2] );
Addition = Operand1 + Operand2;

cout << "/nFirst Number: " << Operand1;
cout << "/nSecond Number: " << Operand2 << endl;
cout << Operand1 << " + " << Operand2 << " = " << Addition << endl;

return 0;
}

保存文件,关闭VC工程,在命令行下输入CL main.cpp回车,这时生成了新的main.exe程序,再在命令行输入main 48.52 1205回车,你会看到如下运行结果:

----------------------------------------------
D:/MyProgram2/AConsoleApp>main 48.52 1205

First Number: 48
Second Number: 1205
48 + 1205 = 1253

D:/MyProgram2/AConsoleApp>]

-----------------------------------------------------------------

2 为了演示字符串参数情况,改变代码如下:
#include
using namespace std;

int main(int argc, char *argv[])
{
char Sentence[40];
strcpy(Sentence, argv[1]);

cout << "You typed " << Sentence<< endl;
return 0;
}
然后再CL main.cpp编译后输入指令main www.czvc.com回车后有:

---------------------------------------------
D:/MyProgram2/AConsoleApp>main www.czvc.com
You typed www.czvc.com

D:/MyProgram2/AConsoleApp>
-------------------------------------------------------------
3 最后再看一例字串和数字并用的情况,改变代码如下:
#include
using namespace std;

int main(int argc, char *argv[])
{
char FullName[40], strGender[20];
char cGender[10];
float Salary;

strcpy(FullName, argv[1]);
Salary = atof(argv[2]);
strcpy(cGender, argv[3]);

if( cGender == "m" || cGender == "M" )
strcpy(strGender, "Male");
else if( cGender == "f" || cGender == "F" )
strcpy(strGender, "Female");
else
strcpy(strGender, "Unknown Gender");

cout << "Employee Information";
cout << "/nFull Name: " << FullName;
cout << "/nGender: " << strGender;
cout << "/nSalary: " << Salary << endl;
return 0;
}
然后再CL main.cpp编译后输入指令main "WWW.CZVC.COM, LOOMMAN NETWORKS" 18.52 "M"回车后有:

-----------------------------
D:/MyProgram2/AConsoleApp>main "WWW.CZVC.COM, LOOMMAN NETWORKS" 18.52 "M"
Employee Information
Full Name: WWW.CZVC.COM, LOOMMAN NETWORKS
Gender: Unknown Gender
Salary: 18.52
-----------------------------------------

转自:http://apps.hi.baidu.com/share/detail/34807775

int main( int argc , char *argv[] , char *envp[] )
main()函数一般用int或者void形的。我比较喜欢用int型定义main。因为在结束的时候可以返回给操作系统一个值以表示执行情况。

int argc
这个东东用来表示你在命令行下输入命令的时候,一共有多少个参数。比方说你的程序编译后,可执行文件是test.exe
D:\tc2>test
这个时候,argc的值是1
但是
D:\tc2>test.exe myarg1 myarg2
的话,argc的值是3。也就是 命令名 加上两个参数,一共三个参数

char *argv[]
这个东东用来取得你所输入的参数
D:\tc2>test
这个时候,argc的值是1,argv[0]的值是 "test"
D:\tc2>test myarg1 myarg2
这个时候,argc的值是3,argc[0]的值是"test",argc[1]的值是"myarg1",argc[2]的值是"myarg2"。
这个东东一般用来为程序提供非常重要的信息,如:数据文件名,等等。
如:copy a.c b.txt
这个时候,a.c和b.txt就是所谓的“非常重要的信息”。不指定这两个文件,你没法进行拷贝。
当你的程序用到argc和argv这两个参数的时候,可以简单地通过判断argc的值,来看看程序的参数是否符合要求

char *envp[]
这个东东相对来说用得比较少。它是用来取得系统的环境变量的。
如:在DOS下,有一个PATH变量。当你在DOS提示符下输入一个命令(当然,这个命令不是dir一类的内部命令)的时候,DOS会首先在当前目录下找这个命令的执行文件。如果找不到,则到PATH定义的路径下去找,找到则执行,找不到返回Bad command or file name
在DOS命令提示符下键入set可查看系统的环境变量
同样,在UNIX或者LINUX下,也有系统环境变量,而且用得比DOS要多。如常用的$PATH,$USER,$HOME等等。
envp保存所有的环境变量。其格式为(UNIX下)
PATH=/usr/bin;/local/bin;
HOME=/home/shuui
即:
环境变量名=值
DOS下大概也一样。
环境变量一般用来为程序提供附加信息。如,你做了一个显示文本的内容的程序。你想控制其一行中显示的字符的个数。你可以自己定义一个环境变量(UNIX下)
%setenv NUMBER = 10
%echo $NUMBER
10
然后你可以在程序中读入这个环境变量。然后根据其值决定一行输出多少个字符。这样,如果你不修改环境变量的话,你每次执行这个程序,一行中显示的字符数都是不一样的
下面是一个例子程序

/* argtest.c */
#include<stdio.h>
int main( int argc , char *argv[] , char *envp[] )
{
int i;

printf( "You have inputed total %d argments\n" , argc );
for( i=0 ; i<argc ; i++)
{
printf( "arg%d : %s\n" , i , argv[i] );
}

printf( "The follow is envp :\n" );
for( i=0 ; *envp[i]!='\0' ; i++ )
{
printf( "%s\n" , envp[i] );
}
return 0;
}


D:\>argtest this is a test programe of main()'s argments
You have inputed total 9 argments
arg0 : D:\TC\NONAME.EXE
arg1 : this
arg2 : is
arg3 : a
arg4 : test
arg5 : programe
arg6 : of
arg7 : main()'s
arg8 : argments
The follow is envp :
TMP=C:\WINDOWS\TEMP
TEMP=C:\WINDOWS\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
COMSPEC=C:\WINDOWS\COMMAND.COM
SBPCI=C:\SBPCI
windir=C:\WINDOWS
BLASTER=A220 I7 D1 H7 P330 T6
CMDLINE=noname this is a test programe of main()'s argments

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics