手动构造完全与`char *argv[]` 等价的参数

当需要为第三方模块构造一个与`main`函数参数`char *argv[]`等价的参数时,由于模块的限制,作者遇到了编译错误。经过一系列尝试,发现问题在于参数必须是一个指向`const char *`的数组,并且需要以`NULL`结尾。最终通过静态类型转换和理解隐式转换规则,成功解决了构造参数的问题。
摘要由CSDN通过智能技术生成

场景

在main函数中的两个参数(int argc , char *argv[]),都是系统构造的。通常来说,我们只需要去解析即可,不需要去构造这样一个参数。

然而,今天写代码时却不得不构造这样一个参数。原因是使用了一个第三方的模块(准确的说是基于第三方模块),第三方模块初始化时需要接受(int argc , char ** &argv)这样的参数。注意到其中的引用符号!

通常来说,直接传递main函数的argc , argv是没有问题的。事实也确实如此,传递main函数接受的argv不会有编译错误。不过有些坑就是,这个模块自己参数解析写得太武断!就是不允许有多余的参数项!一旦有多余参数项就会导致其停止解析参数,最终导致其解析失败。然而我的程序除了给这个模块传参数,还需要额外的参数啊!

没有办法,我就得自己构造仅仅包含第三方模块需要的参数argv , 但是狗血的事情出现了!

怎么构造就是不行!!编译一直报错:

用类型为‘char**’的右值初始化类型为‘char**&’的非常量引用无效

经过一系列的修改,终于正确编译了。

一切的狗血,都是因为概念理解的不清晰。

解决方案

只考虑argv的构造:

int fack_main(int argc , char **&argv);

int fack_argc = 2 ;
char arg0[] = "program name" ;
char arg1[] = "arg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值