如何将 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 是正确的开头类型。