如何将char * a []转换为char **?

时间:2015-11-24 18:48:07

标签: c arrays pointers double-pointer

我正在尝试使用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 **的整个概念感到困惑

2 个答案:

答案 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是正确的类型。