【发布时间】:2022-02-13 18:23:06
【问题描述】:
我正在阅读一本书中的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;
}
【问题讨论】:
-
它在书中告诉你:“最后两行确保我们跳过了我们阅读的选项”。在
while循环之后optind是getopt发现不是选项的第一个argv条目的索引。阅读getopt manual 了解详情。所以argv += optind会跳过解析的选项。 -
@kaylum 但兄弟它是如何通过的?对于 ex optind=2,将 2 添加到字符串数组意味着删除数组中的前 2 个条目?
-
不是“删除”而是“跳转到”。这就是指针算法的工作原理。如果
optind是2,那么argv += optind将导致argv指向原来的argv[2]。
标签: c command-line-arguments getopt