我尝试使用字符串标记化和将标记存储在以 NULL 终止的数组中来模拟main()
普通函数的行为。char*
一切都很好,除了getopt()
。它不会重新排列argv[0]
,因为它希望第一个参数是程序名称。但对于我的功能argv[0]
来说,这不是程序名称。我也想getopt()
重新排列argv[0]
(非选项)。我怎么做?
getopt(3)
使用全局变量optind
(选项索引)来跟踪其进度并将其初始化为 1。在读取选项之前argv
尝试设置。optind = 0
尝试使用
c = getopt(argc + 1, argv - 1, "xyz")
编辑:正如下面所指出的,这是一个 hack 但我很想看看它不能工作的机器。
尽管@Tom Tanner 建议的黑客攻击适用于某些系统,但它并没有针对我应该让它工作的目标进行编译。我发现的另一个解决方法是用一个虚拟字符串替换我的 argv[] 数组中的第一个参数并使用 getopt() 。