0

如何在 c 中解析没有连字符的参数?

即 virsh 安装 vm

或者

git pull 起源大师

当我尝试它时,如果没有'-'前缀,所有东西都会被忽略并且 argc 返回 1(argv[0] 是程序调用)。

我正在使用 linux,但如果有一个跨平台的方法来实现这一点,那就太好了。

谢谢。

更新:问题是我在第一个参数的前面使用了一个#,试图传入#XX,例如number_program #12,不用说这不起作用。

4

2 回答 2

2

您是否正在使用一些库来为您解析参数?专门将参数传递给 C 程序时,没有特殊的“连字符”参数。用你喜欢的方式解析 argv。

例如:

#include <stdio.h>

int main(int argc, char **argv)
{
        int i;
        for(i=0; i<argc; i++) {
                //dont do this without proper input validation
                printf("%s\n", argv[i]);
        }

        return 0;
}

示例运行:

$ ./a.out test test test -hyphen
./a.out
test
test
test
-hyphen
于 2013-10-08T14:48:32.820 回答
1

argv包含程序名称和程序的参数,按照它们在命令行中给出的顺序。* 连字符并不特殊;它们只是使人和计算机都可以轻松地将选项与其他参数分开。

如果您想以某种方式解释 args,那是您的特权。就是git这样,基本上解释argv[1](如果它存在,当然)作为子命令的名称。你不需要任何库来做到这一点。您只需要决定如何解释 args。

*对 args 解析方式的一些跨平台差异进行取模;例如,*nix 通常会为您做一些预解析并扩展通配符模式。除非您了解这些差异并为它们做好准备,否则您不会拥有 100% 的跨平台兼容性。

于 2013-10-08T14:58:37.067 回答