n00*_*ter 2 c c++ getopt command-line-arguments 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
Run Code Online (Sandbox Code Playgroud)
如果我通过命令行参数,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 );
Run Code Online (Sandbox Code Playgroud)
编辑:
"变量optind是argv中要处理的下一个元素的索引.系统将此值初始化为1.调用者可以将其重置为1以重新开始扫描相同的argv,或者扫描新的参数向量."
所以,是的.您可以使用getopt_long再次扫描参数或另一个参数列表.但是,如果有人先前调用了getopt_long,则必须将全局optind变量设置为1.
请记住,argv
main()中的NULL是NULL终止的argc
,也就是说; argv [argc] == NULL.所以你可能必须确保你自己的最后一个元素new_argv
是一个NULL指针.
(注意,请在发布时显示所有相关代码,很难猜出错误是什么short_options
,例如显示什么,long_option
是,你如何实际构建new_argv,变量声明等)