linux C 命令行参数之getopt()函数的使用

在Linux中,Linux终端提供类的UNIX命令行环境。命令行是在命令行环境中,用户为运行程序输入命令行。在Linux用到的命令常常支持很多参数,第一个想到就是main函数命令行传参,读取在同一行附加项。

带参数的main
c编译器允许main没有参数,也可以main函数带参数。我们常见的就是main函数带两个参数(一些实现运行main函数有更多参数)。当main函数有两个参数时,第一个参数时命令行的字符串的数量。而第二个参数是把每个字符串的地址存储在指针数组中。

#include <stdio.h>

int main(int argc,char **argv)
{
	int i = 0;
    for (i = 0;i < argc;i++)
    {
        printf(" %d: %s\n",i,argv[i]);
    }

	return 0;
}

运行结果:
在这里插入图片描述
argc代表输入的参数个数,而argv中保存着参数具体的值。

注意:char **argv与char *argv[]等价。argv是一个指向指针的指针。

main函数读取命令行参数,把字母数字转换成整数

#include <stdio.h>
#include <stdlib.h>

int factorial(int n);

int main(int argc, char **argv)
{
		
	int num = 0;
	if (argc < 2)
	{
		printf("Usage:%s\n", argv[0]);
		return -1;
	}
	else
	{
		num = atoi(argv[1]);
		if (num > 12)
		{
			printf("Keep input under 13.\n");
			return -1;
		}
		printf("factorial of %d is %d\n",num, factorial(num));
	}


	return 0;
}


int factorial(int n)
{
	if (n <= 1)
		return 1;
	else
		return factorial(n - 1)*n;
}

运行结果:
在这里插入图片描述
如果运行程序时没有提供命令行参数,那么argc < 2 为真,程序将给出提示信息。如果要计算超过12!的阶乘,必须使用能表示的更大范围的类型,例如 double 或 long long。

getopt 分析命令行参数

#include <unistd.h>

int getopt(int argc, char * const argv[], const char *optstring);
extern char *optarg;
extern int opterr, optind, optopt;

返回值:
返回命令行中指定的下一个选项字符。

getopt()函数是一个命令行解析器。参数argc和argv是传递给main()的参数计数和参数数组。参数optstring是一个可识别的选项字符字符串;如果一个字符后面跟着一个<冒号>,那么该选项接受一个参数。

getopt()第三个参数optstring
指的是你支持的选项,假设你的程序支持-a,-b,-c选项,并且-c选项后面要跟具体参数,那么optstring可以是:

"abc:"
选项后面有一个冒号表示这个选项需要带参数。

getopt 的外部变量

extern char *optarg;
extern int opterr, optind, optopt;
optind 存放下一个要处理的字符串在argv数组中的下标,argv[optind];
opterr 如果选项发生错误,应用程序没有将变量opterr设置为0。
optopt 如果选项处理发生错误,它会指向导致出错的选项字符串
optarg 如果一个选项需要参数,如前面提到的c参数,由于后面有:,所以它需要参数,处理到它时,optarg会指向这个参数。
#include <stdio.h>
#include <unistd.h> //getopt

extern int optind,opterr,optopt;
extern char *optarg;

int main(int argc,char **argv)
{

	int c = 0;

	while(EOF != (c = getopt(argc,argv,"abc:")))
	{
		switch(c)
		{
			case 'a':
				printf("option a:\n");
				break;

			case 'b':
				printf("option b:\n");
				break;
            case 'c':
                printf("we get option -n,para is %s\n",optarg); //由于c后面有:,必须要有参数,optarg会指向这个参数。
                break;     
            case '?':
                printf("unknow option:%c\n",optopt);//表示选项不支持
                break;
            default:
                break;	

		}
	}

	return 0;
}

输入正常选项时,我们可以看到能正确获取到选项,如果不是,则提示无效的操作。
在这里插入图片描述
在这里插入图片描述

扫二维码关注微信公众号,获取技术干货

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您关于 Linux C 中 getopt 的问题,getopt 是一个用于解析命令参数的 C 库函数,它能够帮助我们方便地处理命令参数。它的原型定义如下: ```c #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt; ``` getopt 函数的返回值为当前解析到的选项字符,如果已经解析到所有选项,则返回 -1(EOF)。它通过修改全局变量 optind、optarg、opterr 和 optopt 来提供额外的信息。 其中,argc 表示命令参数个数,argv 是一个字符串数组,包含命令参数的具体值。optstring 是一个包含短选项字符的字符串,可以带有冒号用于指示该选项需要附加的参数使用 getopt 函数时,我们需要在循环中调用它,每次循环解析一个选项。以下是一个示例: ```c #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { int opt; while ((opt = getopt(argc, argv, "ab:")) != -1) { switch (opt) { case 'a': printf("Option -a\n"); break; case 'b': printf("Option -b with argument '%s'\n", optarg); break; case '?': printf("Unknown option '%c'\n", optopt); break; } } return 0; } ``` 在上述示例中,我们使用选项字符串 "ab:",其中 'a' 表示一个无需附加参数的选项,'b' 表示一个需要附加参数的选项。通过 optarg 变量,我们可以获取到附加参数的值。 希望以上信息能够对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值