我使用fork和execvp(const char *path, char *const argv[]);
来运行子进程。从文档中可以看出,argv必须NULL
终止。但是,我不知道怎么做。假设我有这样一个实现(这只是为了简单和演示!):
// Allocate space
char **argv_list = (char**)calloc(3, sizeof(char*));
argv_list[0] = (char*)calloc(strlen(token1), sizeof(char));
argv_list[1] = (char*)calloc(strlen(token2), sizeof(char));
argv_list[2] = (char*)calloc(strlen(token3), sizeof(char));
// Assign values
strcpy(argv_list[0], token1);
strcpy(argv_list[1], token2);
strcpy(argv_list[2], token3);
如何添加与上面相同样式的附加
NULL
?使用一个指针数组,我可以这样做:char *argv_list[] = {"ls", "-l", "..", NULL};
我这样试了一下,结果出现了分割错误。请告诉我我做错了什么:
// Add NULL pointer
argv_list = (char**)realloc(argv_list, (4 * sizeof(char*)));
argv_list[3] = (char*)calloc(1, sizeof(NULL));
strcpy(argv_list[3], NULL);
注:请不要告诉我有更好的方法来做这件事,否则我的实现是不好的。我必须像上面那样做,这只是为了简单。提前感谢!
最佳答案
你把我说的话搞得太复杂了。同样值得注意的是,在您的代码中,由于总是使用argv_list[0],您只初始化了3个字符串中的1个
// Allocate space
char **argv_list = (char**)calloc(4, sizeof(char*));
argv_list[0] = (char*)calloc(strlen(token1), sizeof(char));
argv_list[1] = (char*)calloc(strlen(token2), sizeof(char));
argv_list[2] = (char*)calloc(strlen(token3), sizeof(char));
argv_list[3] = NULL;
// Assign values
strcpy(argv_list[0], token1);
strcpy(argv_list[1], token2); //< bug in your code here?
strcpy(argv_list[2], token3); //< bug in your code here?
关于c - 将NULL添加到char双指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58405280/