我编写了(从 Google 复制和粘贴并简化了)一个 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
但是它根本没有打印出任何东西。
最佳答案
你忘记了任何带参数的选项后的“:”。如果你要换一行
while ((i = getopt(argc, argv, "a:b:c:")) != -1) {
您将获得工作变体。
正确阅读man 3 getopt
,它说到getopt
的第三个参数
… optstring 是包含合法选项字符的字符串。如果这样的字符后跟一个冒号,则该选项需要一个参数,因此 getopt() 将指针指向同一 argv 元素中的以下文本,或指向 optarg 中以下 argv 元素的文本。两个冒号表示一个选项 接受一个可选的参数;如果当前 argv 元素中有文本(即与选项名称本身在同一个词中,例如“-oarg”),则它是 在 optarg 中返回,否则 optarg 设置为零。 ……
关于c - 从 unix 命令行运行时 getopt 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212218/