C++ 无法转换';常量字符**';至';常量字符*';

C++ 无法转换';常量字符**';至';常量字符*';,c++,arrays,char,C++,Arrays,Char,大家早上好!我试图通过传递的'-e'参数(例如parent-e child key1=val1…)从父程序创建fork/exec调用。因此,我希望将argv数组中前两个之后的所有值复制到一个新的数组child_argv中。比如: const char *child_argv[10]; // this is actually a global variable static const char *sExecute; int I = 0; const char *Value = a

大家早上好!我试图通过传递的'-e'参数(例如parent-e child key1=val1…)从父程序创建fork/exec调用。因此,我希望将argv数组中前两个之后的所有值复制到一个新的数组child_argv中。比如:

const char *child_argv[10];  // this is actually a global variable
static const char *sExecute;

      int I = 0;
const char *Value = argv[1];
    sExecute = Value;

      for (i=2; i<argc; i++) {
             child_argv[I] = argv[i];
             I++;
      }
    child_argv[I] = NULL;   // terminate the last array index with NULL
execl(sExecute, child_argv);
但是,我收到错误消息“error:无法将参数“2”的“const char**”转换为“const char*”,将其转换为“execl(const char*,const char*,…)”。我甚至尝试使用中间步骤:

const char *child_argv[10];  // this is actually a global variable
static const char *sExecute;

      int I = 0;
const char *Value = argv[1];
    sExecute = Value;

      for (i=2; i<argc; i++) {
    const char *Value = argv[i+1];
             child_argv[I] = Value;
             I++;
      }
    child_argv[I] = NULL;   // terminate the last array index with NULL
const char*child_argv[10];//这实际上是一个全局变量
静态常量字符*sExecute;
int I=0;
常量字符*值=argv[1];
sExecute=值;
对于(i=2;i

从这里开始:


我想你的意思是叫“execv”而不是“execl”.Execl似乎接受数量可变的参数,期望每个常量char*都是另一个参数,而execv接受一个参数数组。

您应该使用execv。当您转换为execv时,出于某种原因execv期望一个非常量指针数组,而不是常量指针数组,因此您必须将数组强制转换为(char**)或者将字符串复制到(char*)指针中。

您的代码不包括编译错误源的
execl
调用。但正如错误所示,您正在传入
child\u argv
(类型为
const char**
)当它需要一个
const char*
时。我建议您阅读,错误的原因应该很明显。实际上,如果您阅读错误消息,您也会理解原因。@Barry文章中包含了“execl”调用。当child_argv被创建为const char*数组时,我如何传递const char**?opps,回顾参考资料,你是对的!我更新为使用'execv',但现在我得到了错误“错误:从'const char**'到'char*const*'[-fppermissive]的转换无效”。我想你可能想读这篇文章,但听起来你需要将
const char*child_argv[10];
更改为
const char*const child_argv[10] 
或类似于这些行的内容。@用户问题是execl希望传递一个常量字符串数组。当您将类型设置为
const char*child_argv[10]
时,这是一个非常量字符串的常量数组。因此,您需要将其设置为常量字符串数组(以任何方式)Beck警告:“我尝试了好几件事,但不能理解。C++不是我的编程语言……还有其他的想法吗?真的,你只需要遵循上面的链接,非常仔细地阅读这个问题的答案。或者,发布一个关于这个问题的新问题。(但很有可能被标记为重复的。)如果你真的想在这个问题上继续前进,你可以使用<代码> COSTOSTCASTE/<代码>来获得正确的选项。但是,对于C++程序员而言,这将是相当丑陋的。谢谢Pink恐怖的帮助!我以为我是在复制字符串(char)。上面列出的第二个示例中的指针使用了“Value”变量…显然没有…任何想法?您的child_argv是一个
const char*
execv
的数组,它的预期参数是(char*)(我不知道为什么,但它确实有)对于C类型,我可能会简化一点,但您可以从右向左阅读。因此,
const char*child_argv[10]
是指向常量字符的指针的10个元素数组。execv将此作为第二个参数:
char*const argv[]
所以,这是一个指向字符的常量指针数组。它承诺不会修改指针本身,但它们指向的字符是公平的。感谢您的帮助!您是说我需要将“const char*child_argv[10]”更改为“char*const argv[]”?对此表示抱歉……正如我所说的,我已经为此工作了两天,我很累,我很沮丧,这个问题阻碍了几个方面的发展。再次感谢你的帮助,我最终从不同的方向着手,并更新了帖子以反映这一点。