getopt()函数:添加argv的目的
getopt() function: purpose of addition of argv
code piece from book
我正在阅读一本书中的 getopt()
函数,并尝试编写一个接受命令行参数的程序。但是optind
加argv
的目的是什么,如何给指针数组加一个整数呢?完整代码:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[]){
char *delivery = "";
int thick = 0;
int count = 0;
char ch;
while((ch = getopt(argc, argv, "td:")) != EOF)
printf("%i\n", ch);
switch(ch){
case 'd':
delivery = optarg;
break;
case 't':
thick = 1;
break;
default:
fprintf(stderr, "Unknown option: '%s'\n", optarg);
return 1;
argc -= optind;
argv += optind;
if(thick)
puts("Thick crust.");
if(delivery[0])
printf("To be delivered %s.\n", delivery);
puts("Ingredients:");
for(count = 0 ; count < argc ; ++count)
puts(argv[count]);
return 0;
}
optind 是命令行管理的下一个参数的索引。换句话说,它是迄今为止管理的参数数量。将optind添加到argv的目的是使其指向命令行上已管理选项后面可能剩余的参数。因此,这些附加参数将在 argv[0]、argv[1]... 到 argv[argc - 1] 中,因为 argc已通过 optind.
递减
以下循环在命令行上显示这些附加参数:
for(count = 0 ; count < argc ; ++count)
puts(argv[count]);
如果您不将 optind 添加到 argv 并且不减少 argc有了它,之前的循环将是:
for(count = optind ; count < argc ; ++count)
puts(argv[count]);
N.B.: 因为 argv 是 char * 上的指针,向其添加一些值,例如 optind 使其增加 "optind x sizeof(char *)"
code piece from book
我正在阅读一本书中的 getopt()
函数,并尝试编写一个接受命令行参数的程序。但是optind
加argv
的目的是什么,如何给指针数组加一个整数呢?完整代码:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[]){
char *delivery = "";
int thick = 0;
int count = 0;
char ch;
while((ch = getopt(argc, argv, "td:")) != EOF)
printf("%i\n", ch);
switch(ch){
case 'd':
delivery = optarg;
break;
case 't':
thick = 1;
break;
default:
fprintf(stderr, "Unknown option: '%s'\n", optarg);
return 1;
argc -= optind;
argv += optind;
if(thick)
puts("Thick crust.");
if(delivery[0])
printf("To be delivered %s.\n", delivery);
puts("Ingredients:");
for(count = 0 ; count < argc ; ++count)
puts(argv[count]);
return 0;
}
optind 是命令行管理的下一个参数的索引。换句话说,它是迄今为止管理的参数数量。将optind添加到argv的目的是使其指向命令行上已管理选项后面可能剩余的参数。因此,这些附加参数将在 argv[0]、argv[1]... 到 argv[argc - 1] 中,因为 argc已通过 optind.
递减以下循环在命令行上显示这些附加参数:
for(count = 0 ; count < argc ; ++count)
puts(argv[count]);
如果您不将 optind 添加到 argv 并且不减少 argc有了它,之前的循环将是:
for(count = optind ; count < argc ; ++count)
puts(argv[count]);
N.B.: 因为 argv 是 char * 上的指针,向其添加一些值,例如 optind 使其增加 "optind x sizeof(char *)"