目录
main函数的参数
第一个带参数的main。
#include <iostream.h>
int main(int argc,char *argv[])
{
for(inti=0;i<argc;i++)
{
cout<<argv[i]<<'\t'; //
}
return0;
}
/*
int argc, char **argv 用于运行时,把命令行参数传入主程序。
argc -- 命令行参数总个数,包括 可执行程序名。
argv[i] -- 第 i 个参数。
argv[0] -- 可执行程序名。
*/
关于带参数的main函数网络收集:int main(int argc,char **argv) 这里面的**argv含义··
是用来传递参数的,假如你编译成的文件名是a.exe,那么在命令提示符下可以通过a.exe12 34来向程序传递参数,这时两个参数就会传递到字符串数组argv中,注意此时实际传递了三个参数,第一个参数是文件名,第二个参数是12,第三个是34,而argc就是参数个数。
int argc, char **argv 用于运行时,把命令行参数传入主程序。
argc -- 命令行参数 总个数,包括 可执行程序名。
argv[i] -- 第 i 个参数。
argv[0] -- 可执行程序名。
// 例如运行:
abc.exe
argc 等于 1, argv[0] 是 "abc.exe"
// 例如运行:
rec.exe 4 5.2
argc 等于 3, argv[0] 是 "rec.exe", argv[1] 是 "4", argv[2] 是 "5.2".
主函数里若有:
int x;
float y;
char s[80];
strcpy(s,argv[0]); // 程序名存入 了 s
sscanf(argv[1],"%d",&x); // x 得到数值4
sscanf(argv[2],"%f",&y); // y 得到数值 5.2
ANSI-C(C89/C99)的话main()函数有2种主要形式。
(1) int main(void)
(2) int main(int argc, char *argv[])
(2)也可写成int main(int argc, char **argv)
argv[argc]放空指针(NULL指针)。
argc和argv可以用别名。
另外,还有一种受系统限制的形式:
int main(int argc, char *argv[], char *envp[])
前两个参数同(2),第三个参数envp[]放环境变量。
这个形式很少用。
所以严格讲,
ANSI-C推荐的带参数的main()函数只有上面(2)这一种。
另外,搜集了一下C和C++中常见的几种形式:
(1) main()
(2) int main()
(3) int main(void)
(4) int main(int, char**)
(5) int main(int, char*[])
(6) int main(int argc, char **argv)
(7) int main(int argc, char *argv[])
(8) int main( int argc, char *argv[], char*envp[])
(9) void main(void)
(1)是(3)的简写。不推荐使用。
(2)是(3)的简写。在C++中是正确的形式。
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。
(6)是(7)的另外写法。两种都可以,凭个人爱好。
(7)是带参数的正确的形式。推荐使用。
(8)是一种很少用的写法,且受系统限制。
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式)
原文:http://www.cnblogs.com/zerocc/archive/2010/12/17/1909642.html
C++ 命令行参数解析
说明
主要参考以下博客:
博客三:使用 Qt 解析命令行参数
短选项名之 getopt()
头文件:#include <unistd.h>
函数原型:int getopt(int argc, char * const argv[], const char *optstring);
参数解释:[param1] argc: main 函数的 argc[param2] argv: main 函数的 argv[param3] optstring: 格式控制符。"ab:c:d"代表 -b 和 -b 选项后面有冒号,表示必须跟一个参数(如 -b 77),而 -a 和 -d 后面没有冒号,表示不需要参数,如果(gcc -g ……)详细说明见文章后面相关章节
相关变量:extern char *optarg; 表示参数的具体内容extern int optind; 表下一个将被处理到的参数在 argv 中的下标值extern int opterr;extern int optopt;
测试案例:
// Opt.cpp
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
// 短参数测试案例
void testGetOpt(int argc, char *argv[]) {
int opt; // getopt() 的返回值
const char *optstring = "a:b:c:d"; // 设置短参数类型及是否需要参数
while ((opt = getopt(argc, argv, optstring)) != -1) {
printf("opt = %c\n", opt); // 命令参数,亦即 -a -b -c -d
printf("optarg = %s\n", optarg); // 参数内容
printf("optind = %d\n", optind); // 下一个被处理的下标值
printf("argv[optind - 1] = %s\n\n", argv[optind - 1]); // 参数内容
}
}
int main(int argc, char *argv[]) {
testGetOpt(argc, argv);
return 0;
}
正确的使用方法(√):
[User@ubuntu:~/Desktop]$ opt.exe -a a_para -b b_para -c c_para -d # 参数全用
[User@ubuntu:~/Desktop]$ opt.exe -a a_para -b b_para -d # 部分参数
[User@ubuntu:~/Desktop]$ opt.exe -b b_para -a a_para # 可以倒序
[User@ubuntu:~/Desktop]$ opt.exe # 可以无参
错误的使用方法(×):
[User@ubuntu:~/Desktop]$ opt.exe -a # -a 后面没有跟参数
[User@ubuntu:~/Desktop]$ opt.exe -a a_para -d d_para # -d 后面跟了参数
长短选项名之 getopt_long()
头文件:#include <getopt.h>
函数原型:int getopt(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
参数解释:[param1] argc: main 函数的 argc[param2] argv: main 函数的 argv[param3] optstring: 格式控制符[param4] longopts: 一个由option结构体组成的数组,数组的每个元素