非法参数 Execv() Unix C++

发布于 2024-08-07 03:01:26 字数 653 浏览 4 评论 0原文

所以我基本上有一个向量参数,每个数组有 1 个参数,我试图将其传递给 unix 中的 execv() 调用。

Execv 接受两个参数,如下所示: int execv(const char *path, char *const argv[]);

将字符串向量转换为指针数组的最佳方法是什么?现在我正在执行以下操作,但是当我用 ps -a -f 运行它时,ps 对我大喊大叫,说非法参数。任何帮助表示赞赏。

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????

So I basically have a vector args with 1 argument per array that I'm trying to pass to an execv() call in unix.

Execv accepts two parameters like so: int execv(const char *path, char *const argv[]);

What's the best way to convert my vector of strings to an array of pointers ? Right now I'm doing the following but when I run it with say, ps -a -f, ps yells at me saying illegal argument. Any help is appreciated.

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

.

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说晚安 2024-08-14 03:01:26

我认为你的问题可能是你忽略了在数组末尾放置一个 NULL 。试试这个:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]

I think your problem may be that you are neglecting to put a NULL at the end of the array. Try this:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]
我是有多爱你 2024-08-14 03:01:26

execv 函数提供指向空终止字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须以 NULL 指针终止。

The execv functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the file name associated with the file being executed. The array of pointers must be terminated by a NULL pointer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文