【问题标题】:How do you convert a string to a char[]* in C++ execve command?如何在 C++ execve 命令中将字符串转换为 char[]*?
【发布时间】:2013-03-27 02:39:14
【问题描述】:

当尝试使用 execve 命令时,我收到关于我最后 2 个参数的错误。

     #include <unistd.h>        
     const char * c = enviorment.c_str();
     execve(full.c_str() , cl.getArgVector(), c);

我尝试过使用几种不同的选项来复制字符串,例如:

char *temp2 = new char[(path).size()+1];
strcpy ( temp2, cl.getCommand());
    execve(full.c_str() , cl.getArgVector(), temp);

但我无法让它工作并收到错误消息:

错误:无法将参数 3 的 char* 转换为 char* const* 到 int execve(const char*, char* const*, char* const*)

【问题讨论】:

  • enviorment 是什么样的?它是"KEY=VALUE" 形式的单个键/值对还是多个分隔键变量?
  • @JorgeIsraelPeña 我相信这是特定于环境的 (ba-dun-tss)
  • @RichardJ.RossIII 啊,好吧,确实,从手册页来看,这似乎是一种约定,但不一定是强制的/要求。我错误地认为它必须是"KEY=VALUE" 形式的字符串数组。尽管如此,我还是问我们是否应该拆分他的environment 字符串,这取决于他的环境的execveenvp 参数的期望。

标签: c++ string char execve


【解决方案1】:

环境变量数组是一个字符串数组(char*),而不是一个字符串。它需要一个 NULL 值作为数组中的最后一个元素。

模仿您用于实现 c1.getArgVector() 的代码,确保数组中的最后一个 char* 为 NULL。

【讨论】:

  • 最后我错过了 NULL。非常感谢!
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2013-05-13
相关资源
最近更新 更多