在编译时参数未知时创建 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[]