Getopt_long()函数带有自定义argc和argv
getopt_long() function with custom argc and argv
我在使用getopt_long()函数与自定义argc和argv时遇到了麻烦。
我接收字符串形式的参数,而不是真正的命令行参数。然后从这个字符串构建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工作对我来说是OK的。所以我的做空和做多选择是正确的。但是如果我传入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 );
EDIT:
"变量optind是argv中要处理的下一个元素的索引。系统初始化该值为1。调用者可以将其重置为1以重新扫描相同的argv,或者在扫描新的参数向量时。"
所以,是的。您可以使用getopt_long再次扫描参数或另一个参数列表。但是,如果之前有人调用了getopt_long,则必须将全局opind变量设置回1。
请记住,main()中的argv
是NULL终止的,argc
是长,即;argv[argc] == NULL。因此,您可能必须确保自己的new_argv
中的最后一个元素是NULL指针。
(注意,请在发布时显示所有相关代码,很难猜测错误是什么,例如显示short_options
, long_option
是什么,您实际如何构建new_argv,变量声明等)
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- Getopt_long()函数带有自定义argc和argv