【问题标题】:How can I append NULL onto the end of a string pointer array?如何将 NULL 附加到字符串指针数组的末尾?
【发布时间】:2015-09-08 00:24:43
【问题描述】:

我正在尝试使用 execvp 执行带有给定标志的 unix 命令。

我的数组 argv 可能包含以下元素:

{"ls", "-a"}

然后我将这个数组传递给

execvp(argv[0], argv);

如何安全地将 NULL 附加到 argv 数组的末尾,以便 execvp 知道在哪里终止?

【问题讨论】:

  • 数组是静态定义的,还是作为参数传递给程序,还是从用户输入生成?
  • 如果他正在接收一个没有多余空间的非 NULL 终止数组,他将不得不将它复制到一个大一个元素的数组中,但这不太可能?
  • 感谢您的回复。我确实是根据用户输入生成的。正如我在下面提到的,这是对我的疏忽。我在调用 malloc 时忘记考虑 NULL 元素。

标签: c string malloc execvp


【解决方案1】:

您的数组中有 2 个元素。只需分配三个元素并将最后一个元素设置为 NULL:

char* args[] = {"ls", "-a", NULL};
execvp(path, args);

或者,既然你提到了malloc()

char** args = malloc(3 * sizeof args[0]);
args[0] = "ls";
args[1] = "-a";
args[2] = NULL;
execvp(path, args);
free(args);

【讨论】:

  • 你不需要在 C 中强制转换 malloc() return
  • 不知道需要修改的数组是他分配的还是别人分配的。
  • 如果他想扩展一个他自己没有分配的现有数组,他将不得不分配一个新数组并将现有值复制到其中。
  • 事实证明这只是我的疏忽。感谢您的回复。由于我是根据用户输入生成数组,因此我使用了一个与命令和/或标志数量相匹配的计数器变量。调用 malloc() 时,我忘记考虑 NULL 的额外元素。
  • 我知道,这是吹毛求疵,但是由于初学者复制代码,我想提一下malloc 可以返回NULL。
猜你喜欢
  • 1970-01-01
  • 2014-03-06
  • 2017-09-29
  • 2022-12-11
  • 2020-08-19
  • 2013-10-17
  • 2020-10-04
  • 2023-03-12
  • 2018-02-28
相关资源
最近更新 更多