在 C 中返回多维 char 数组

发布于 2024-12-07 20:43:11 字数 757 浏览 0 评论 0原文

在 C 语言中,如何创建一个返回字符串数组的函数?或者多维字符数组?

例如,我想返回在函数中创建的数组 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是如何工作的

In C, how can I create a function which returns a string array? Or a multidimensional char array?

For example, I want to return an array char paths[20][20] created in a function.

My latest try is

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

}

I tried various 'settings' but each gives some kind of error.

I don't know how C works

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放肆 2024-12-14 20:43:11

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

您应该使用 malloc 创建动态数组:

char **array = malloc(20 * sizeof(char *));
int i;
for(i=0; i != 20; ++i) {
    array[i] = malloc(20 * sizeof(char));
}

然后返回数组即可

You can't safely return a stack-allocated array (using the array[20][20] syntax).

You should create a dynamic array using malloc:

char **array = malloc(20 * sizeof(char *));
int i;
for(i=0; i != 20; ++i) {
    array[i] = malloc(20 * sizeof(char));
}

Then returning array works

停顿的约定 2024-12-14 20:43:11

您应该只返回array (return array;)。声明后的 ** 用于取消引用。

另外,请确保该数组的内存是在堆上分配的(使用malloc或类似函数)

You should just return array (return array;). the ** after declaration are used for dereferencing.

Also, make sure the the memory for this array is allocated on the heap (using malloc or simillar function)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文