【发布时间】:2016-12-11 19:02:52
【问题描述】:
看看这个:
char (*options)[MAXLEN];
char *ptr;
ptr = strtok(input, " \r\n");
if(!ptr)
continue;
int i = 0;
optionen = malloc(sizeof(*options));
if(!options)
die("malloc");
while(ptr){
if(i > 0){
options = realloc(options, (i+1)*sizeof(*options));
if(!options)
die("malloc");
}
strcpy(options[i], ptr);
if(!options[i])
die("strcpy");
ptr = strtok(NULL, " \r\n");
i++;
}
/*create another entry options[i] that is a nullpointer*/
目的是 exec(3) 命令需要一个空指针作为 *options[] 数组的最后一个条目才能正常工作。
问题:如何向数组中添加另一个 NULL 指针条目?我知道我无法分配另一个 options[i] 并将其设置为 NULL,因为 stackoverflow 上的某个人告诉我永远不要这样做(内存泄漏)。
注意:输入是一些包含一些命令行的数组 - 输入(char input[MAXLEN];)和die() 只是调用perror() 然后exit()
【问题讨论】:
-
不要相信他们说的话。分配另一个条目并将其值设置为
NULL。 -
你能给我一个例子行吗?
-
我是否正确读取和解析
char (*options)[MAXLEN];中的options是指向MAXLEN字符数组的指针?这是故意的吗? -
是的,这就是意图
-
Josch,如果你知道
options[i]是一个字符,你为什么还要这样做strcpy(options[i], ptr);?你打开编译器警告了吗?
标签: c arrays null-pointer