C语言 初始化无限数量的char **



我正在使用minilibX库在C中制作光线追踪引擎。我希望能够在.conf文件中读取场景显示的配置:

例如:

(Az@Az 117)cat universe.conf
#randomcomment
obj:eye:x:y:z
light:sun:100
light:moon:test

对象的数量可以在1到无穷大之间变化。从现在开始,我读取文件,在char **选项卡中逐一复制每行,并根据找到的对象数量进行错位定位,如下所示:

void    open_file(int fd, struct s_img *m)
{
  int   i;
  char  *s;
  int   curs_obj;
  int   curs_light;
  i = 0;
  curs_light = 0;
  curs_obj = 0;
  while (s = get_next_line(fd))
    {
      i = i + 1;
      if (s[0] == 'l')
        {
          m->lights[curs_light] = s;
          curs_light = curs_light + 1;
         }
       else if (s[0] == 'o')
         {
           m->objs[curs_obj] = s;
           curs_obj = curs_obj + 1;
         }
       else if (s[0] != '#')
         {
          show_error(i, s);
          stop_parsing(m);
         }
  }  

现在,我希望能够将每个tab[i]的每个信息存储在一个新的char **tab中,每个对象1,使用':'作为分离。所以我需要初始化和malloc, char **tab的数量未定。我该怎么做呢?

p:我希望我的代码和我的英语足够好,你可以理解。我只使用最基本的函数,比如读,写,打开,malloc…然后我重新构建其他的东西,比如printf, get_line等等)

不能分配不确定的内存;malloc不支持。你能做的就是现在分配足够的内存,以后再修改

size_t buffer = 10;
char **tab = malloc(buffer);
//...
if (indexOfObjectToCreate > buffer) {
  buffer *= 2;
  tab = realloc(tab, buffer);
}

我会使用另一种方法(因为这是c,而不是c++),并在我们执行时分配简单的大缓冲区:

char *my_malloc(size_t n) {
      static size_t space_left = 0;
      static char *base = NULL;
      if (base==NULL || space_left < n) base=malloc(space_left=BIG_N);
      base +=n; return base-n;
}

免责声明:我省略了垃圾收集、测试返回值和所有安全措施,以保持例程的简短。

另一种方法是将文件读入一个足够大的错位数组(你可以用ftell检查它),扫描缓冲区,用ascii零字符替换分隔符,换行符等,并记住关键字的起始位置。

相关内容

  • 没有找到相关文章

最新更新