我正在尝试使用char *
数组时返回char **我有什么办法可以有效地做到这一点吗?
char *pos;
if ((pos=strchr(line, '\n')) != 0)
*pos = '\0';
//parses command in input (max of (arg_num - 2) flags)
int arg_num = count_tokens( line, delim);
char *args[arg_num]; // = malloc( sizeof(char) * strlen(line)); //[ delim_count + 2 ]; //plus the last seat for NULL
//puts cmd && flags in args
int i = 0;
for(; i < arg_num; i++)
//strcpy(args[i], strsep( &line, " "));
args[i] = strsep( &line, " ");
char** a = args;
return a;
编辑:如果我正在使用char **,在设置和访问字符串(使用strsep)方面,如何让它像数组一样工作。我对char **的整个概念感到困惑
答案 0 :(得分:3)
args
是堆栈上的本地数组。当函数返回时,它会被销毁,因此你无法从函数中返回它。
要从函数返回生存,您需要在堆上分配它。而不是char *args[arg_num];
做char** args = malloc(sizeof *args * arg_num);
。
答案 1 :(得分:2)
args
是一个局部变量,当你return
时会被销毁,所以你显然无法返回指向它的指针。你必须考虑别的事情。
您可以动态分配args
:
char **args = malloc(sizeof(*args) * arg_num);
然后args
是正确的类型。