如何将 char *a[] 转换为 char **?
How to convert char *a[] into char **?
我在处理 char*
数组时尝试 return 一个 char**
有什么方法可以有效地做到这一点?
char *pos;
if ((pos=strchr(line, '\n')) != 0)
*pos = '[=10=]';
//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**
的整个概念有点困惑
args
是栈上的局部数组。当函数 returns 它被销毁时,你不能从函数中 return 它。
要从函数中存活 return,您需要在堆上分配它。而不是 char *args[arg_num];
做 char** args = malloc(sizeof *args * arg_num);
.
args
是局部变量,当您 return
时将被销毁,因此您显然不能 return 指向它的指针。你得想点别的了。
您可以动态分配 args
:
char **args = malloc(sizeof(*args) * arg_num);
那么 args
是正确的开头类型。
我在处理 char*
数组时尝试 return 一个 char**有什么方法可以有效地做到这一点?
char *pos;
if ((pos=strchr(line, '\n')) != 0)
*pos = '[=10=]';
//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**
的整个概念有点困惑args
是栈上的局部数组。当函数 returns 它被销毁时,你不能从函数中 return 它。
要从函数中存活 return,您需要在堆上分配它。而不是 char *args[arg_num];
做 char** args = malloc(sizeof *args * arg_num);
.
args
是局部变量,当您 return
时将被销毁,因此您显然不能 return 指向它的指针。你得想点别的了。
您可以动态分配 args
:
char **args = malloc(sizeof(*args) * arg_num);
那么 args
是正确的开头类型。