3

我尝试使用字符串标记化和将标记存储在以 NULL 终止的数组中来模拟main()普通函数的行为。char*

一切都很好,除了getopt()。它不会重新排列argv[0],因为它希望第一个参数是程序名称。但对于我的功能argv[0]来说,这不是程序名称。我也想getopt()重新排列argv[0](非选项)。我怎么做?

4

3 回答 3

3

getopt(3)使用全局变量optind(选项索引)来跟踪其进度并将其初始化为 1。在读取选项之前argv尝试设置。optind = 0

于 2013-08-12T10:06:03.967 回答
0

尝试使用

c = getopt(argc + 1, argv - 1, "xyz")

编辑:正如下面所指出的,这是一个 hack 但我很想看看它不能工作的机器。

于 2013-08-12T10:20:26.650 回答
0

尽管@Tom Tanner 建议的黑客攻击适用于某些系统,但它并没有针对我应该让它工作的目标进行编译。我发现的另一个解决方法是用一个虚拟字符串替换我的 argv[] 数组中的第一个参数并使用 getopt() 。

于 2013-08-22T12:48:29.600 回答