我编写(复制并粘贴自谷歌并简化)一个C程序,使用getopt打印出从Unix命令行传入的参数值。
从Unix命令行:
./myprog -a 0 -b 1 -c 2
我的C代码是:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int i;
while ((i = getopt(argc, argv, "abc")) != -1) {
switch (i) {
case 'a':
printf("A = %s\n", optarg);
break;
case 'b':
printf("B = %s\n", optarg);
break;
case 'c':
printf("C = %s\n", optarg);
break;
default:
break;
}
}
return 0;
}
我想编程打印出所传递的每个值,例如
A = 0
B = 1
C = 2
然而,它根本没有打印出来。
答案 0 :(得分:5)
你忘了&#34;:&#34;在任何带参数的选项之后。如果你改变一行
while ((i = getopt(argc, argv, "a:b:c:")) != -1) {
你会得到工作变体。
正确阅读man 3 getopt
,它说getopt
的第三个论点
... optstring是一个包含合法选项字符的字符串。如果这样的字符后面跟一个冒号,那么该选项需要一个参数,所以 getopt()在optarg中的同一个argv-element或以下argv-element的文本中放置一个指向以下文本的指针。两个冒号意味着一个选项 采取可选的arg;如果当前argv-element中有文本(例如,与选项名称本身相同的单词,例如,&#34; -oarg&#34;),那么它是 在optarg中返回,否则optarg设置为零。 ...