gpt4 book ai didi

c++ - 带有自定义 argc 和 argv 的 getopt_long() 函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:58 24 4
gpt4 key购买 nike

我在使用带有自定义 argc 和 argv 的 getopt_long() 函数时遇到问题。

我收到的是字符串形式的参数,而不是真正的命令行参数。然后根据该字符串构建 new_argc 和 new_argv 以与 getopt_long() 一起使用。但是 getopt_long() 在第一次调用时失败了。返回 EOF 和 optarg = NULL。

string is "-c 10.30.99.41" 
new_argc = 3
new_argv[0]=>./prog_name
new_argv[1]=>-c
new_argv[2]=>10.30.99.41

如果我传递命令行参数,getopt_long 对我来说工作正常。所以我的短期和长期选择是正确的。但是,如果我传递 new_argc 和 new_argv,它就会失败。

我确定我的短选项和长选项都是正确的,并且 argv 以 NULL 终止。抱歉我不能在这里发布更多代码。

我怀疑 getopt_long 是否可以与自定义 argc 和 argv 一起使用。我怀疑它只适用于真正的 argc 和 argv,因为它必须引用 libc 中与 argc、argv 相关的其他一些代码。有什么意见吗?

option = getopt_long( new_argc, new_argv, short_options, long_options, NULL );

最佳答案

编辑:

"变量optind是argv中下一个要处理的元素的索引。系统将此值初始化为1。调用者可以将其重置为1以重新开始扫描同一个argv,或者扫描新的参数 vector 时”

所以,是的。您可以使用 getopt_long 再次扫描参数或另一个参数列表。但是,如果之前有人调用过 getopt_long,则必须将全局 optind 变量设置回 1。

记住 main() 中的 argv 是 NULL 终止的并且 argc 很长,也就是说; argv[argc] == 空值。因此,您可能必须确保您自己的 new_argv 中的最后一个元素是 NULL 指针。

(注意,发帖时请出示所有相关代码,很难猜出是什么错误,例如显示什么是short_options, long_option,你实际是怎么构建的你的 new_argv、变量声明等)

关于c++ - 带有自定义 argc 和 argv 的 getopt_long() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931687/

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