C 如何将NULL附加到字符串指针数组的末尾?

C 如何将NULL附加到字符串指针数组的末尾?,c,string,malloc,execvp,C,String,Malloc,Execvp,我正在尝试使用execvp执行带有给定标志的unix命令 我的数组argv可能包含以下元素: {"ls", "-a"} 然后我将这个数组传递给 execvp(argv[0], argv); 如何将NULL安全地附加到argv数组的末尾,以便execvp知道在哪里终止?数组中有2个元素。只需分配三个元素,并将最后一个元素设置为NULL: char* args[] = {"ls", "-a", NULL}; execvp(path, args); 或者,既然您提到了malloc(): 数组是静

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

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

{"ls", "-a"}
然后我将这个数组传递给

execvp(argv[0], argv);

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

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

char* args[] = {"ls", "-a", NULL};
execvp(path, args);
或者,既然您提到了
malloc()


数组是静态定义的,还是作为参数传递给程序,或者您是从用户输入生成的?如果他接收的是一个非空终止的数组,没有额外的空间,他将不得不将其复制到一个大一个元素的数组,但这不太可能?感谢您的响应。我确实是根据用户输入生成的。正如我在下面提到的,这是我这边的疏忽。调用malloc时,我忘记了解释NULL元素。您不需要在CWe中强制转换
malloc()
return。我们不知道需要修改的数组是由他分配的还是其他什么东西。如果他想扩展一个他自己没有分配的现有数组,他将不得不分配一个新的数组,并将现有的值复制到其中。事实证明,这只是我的疏忽。谢谢你的回复。因为我是根据用户输入生成数组的,所以我使用了一个与命令和/或标志数量匹配的计数器变量。调用malloc()时,我忘了考虑NULL的额外元素。我知道,这是吹毛求疵,但由于初学者复制代码,我想指出
malloc
可能返回NULL。
char** args = malloc(3 * sizeof args[0]);
args[0] = "ls";
args[1] = "-a";
args[2] = NULL;
execvp(path, args);
free(args);