在C中返回多维char数组

时间:2011-10-01 18:38:04

标签: c arrays multidimensional-array

在C中,如何创建一个返回字符串数组的函数?还是多维char数组?

例如,我想返回在函数中创建的数组char paths[20][20]

我最近的尝试是

char **GetEnv()
{
  int fd;
  char buf[1];
  char *paths[30];
  fd = open("filename" , O_RDONLY);

  int n=0;
  int c=0;
  int f=0;
  char tmp[64];

  while((ret = read(fd,buf,1))>0)
  {
    if(f==1)
    {
      while(buf[0]!=':')
      {
        tmp[c]=buf[0];
        c++;
      }
      strcpy(paths[n],tmp);
      n++;
      c=0;
    }
    if(buf[0] == '=')
      f=1;
  }
  close(fd);

  return **paths; //warning: return makes pointer from integer without a cast
  //return (char**)paths; warning: function returns address of local variable

}

我尝试了各种'设置',但每种设置都有一些错误。

我不知道C是如何工作的

2 个答案:

答案 0 :(得分:3)

您无法安全地返回堆栈分配的数组(使用数组[20] [20]语法)。

您应该使用malloc:

创建动态数组
char **array = malloc(20 * sizeof(char *));
int i;
for(i=0; i != 20; ++i) {
    array[i] = malloc(20 * sizeof(char));
}

然后返回数组

答案 1 :(得分:3)

您应该返回arrayreturn array;)。声明后的**用于解除引用。

另外,请确保在堆上分配此数组的内存(使用malloc或simillar函数)