gpt4 book ai didi

c - 从 unix 命令行运行时 getopt 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:00 24 4
gpt4 key购买 nike

我编写了(从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com