在编译时参数未知时创建 execv 参数数组
Creating the execv argument array when the arguments are unknown at compile time
我正在尝试恢复内部 CAM 应用程序,即让它在当前的 gcc 上编译,以便我可以维护它。我有 27 年的经验,偶尔 C/C++ hack ;-)
有问题的部分是命令行核心,所以没有UI。它有一种前端,可以对其输入参数进行一些检查和操作,并将它们移动到一个新的 argv 中,execv 使用它来切换到完成实际工作的 2 个不同可执行文件中的一个。
现有代码包含 5 个不同的 CL 选项,但据我所知,通常只使用 2 个。当尝试在声明中使用大括号括起来的列表以外的任何方式填充新的 argv (char* const new_argv[32]) 时,编译器说我只能用大括号括起来... .
我用谷歌搜索了 2 天,但没有找到令人信服的结果。有没有一种巧妙的方法可以做到这一点,或者只是丑陋的蛮力方式?整个设计有什么严重的错误吗?
将数组的类型更改为char *[]
,然后您可以在将其传递给execv
之前分配给每个数组成员。
这是允许的,因为 char *[]
可以转换为 char * const[]
但不能转换为 const char *[]
或 const char * const[]
我正在尝试恢复内部 CAM 应用程序,即让它在当前的 gcc 上编译,以便我可以维护它。我有 27 年的经验,偶尔 C/C++ hack ;-)
有问题的部分是命令行核心,所以没有UI。它有一种前端,可以对其输入参数进行一些检查和操作,并将它们移动到一个新的 argv 中,execv 使用它来切换到完成实际工作的 2 个不同可执行文件中的一个。
现有代码包含 5 个不同的 CL 选项,但据我所知,通常只使用 2 个。当尝试在声明中使用大括号括起来的列表以外的任何方式填充新的 argv (char* const new_argv[32]) 时,编译器说我只能用大括号括起来... .
我用谷歌搜索了 2 天,但没有找到令人信服的结果。有没有一种巧妙的方法可以做到这一点,或者只是丑陋的蛮力方式?整个设计有什么严重的错误吗?
将数组的类型更改为char *[]
,然后您可以在将其传递给execv
之前分配给每个数组成员。
这是允许的,因为 char *[]
可以转换为 char * const[]
但不能转换为 const char *[]
或 const char * const[]