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

时间:2011-10-28 15:53:21

标签: c++ c command-line-arguments getopt c-libraries

我在使用带有自定义argc和argv的

的getopt_long()函数时遇到问题

我用字符串而不是真正的命令行args接收我的参数。然后从该字符串构建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,因为它必须引用与argc,argv相关的libc中的其他一些代码。有什么意见吗?

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

1 个答案:

答案 0 :(得分:5)

编辑:

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

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

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

(注意,请在发布时显示所有相关代码,很难猜出错误是什么,例如显示short_optionslong_option是什么,实际构建new_argv的方式,变量声明等。)