C 下标值既不是数组,也不是数组索引处的指针或向量

C 下标值既不是数组,也不是数组索引处的指针或向量,c,arrays,struct,global-variables,C,Arrays,Struct,Global Variables,家庭作业问题 我只是在学习C语言,我正在制作一个程序,从一个文件中读取数据,创建该数据的路由器,并将指向路由器的指针放在一个255大小的数组中,但我一直在试图将它们添加到数组中的行中得到标题错误 #define ARRAY_SIZE 255 struct router routers[ARRAY_SIZE] = {0}; int main(int argc, char *argv[]){ unsigned char id; char name[32]; struct router

家庭作业问题 我只是在学习C语言,我正在制作一个程序,从一个文件中读取数据,创建该数据的路由器,并将指向路由器的指针放在一个255大小的数组中,但我一直在试图将它们添加到数组中的行中得到标题错误

#define ARRAY_SIZE 255
struct router routers[ARRAY_SIZE] = {0};

int main(int argc, char *argv[]){
  unsigned char id;
  char name[32];
  struct router *new_router;

  if(argc == 2){
    //reads file with fread
    //setting id and name which prints out as expected

    new_router = make_router(id, name); //initialising method that returns a router pointer
    routers[new_router->id] = new_router; 
    //error occurs here, at [new_router->id]. Have also tried just using id
    }
 }
我已经搜索了很多带有相同错误消息的线程,但它们都不是没有声明数组的人,就是被建议尝试使用无符号字符作为索引号,这是我已经在使用的。我想了解一下这一点

struct router{
  unsigned char id;
  char name[32];
}

struct router* make_router(unsigned char id, char* name){
  struct router *r = malloc(sizeof(struct router));

  r->id = id;
  r->name = name;

  return r;
}
这:

意味着路由器是数组大小结构的数组。不是指向结构的指针,这就是:

routers[new_router->id] = new_router; 
正在尝试分配到其中一个元素中

如果make_router正在动态分配内存,修复方法可能是将数组声明更改为指针数组:

struct router * routers[ARRAY_SIZE];
              ^
              |
             way
          important
编辑:当然,我假设在某个地方有一个实际的struct router声明,而您刚才忽略了它。为了完整起见,最好将其包含在内。

假设make_router动态分配一个结构,那么

routers[new_router->id] = *new_router; // note *
解决编译器错误

但是,如果结构具有指针成员,则不能复制这样的结构。你说路由器只是一个基本结构,id是一个无符号的字符,名称是一个字符*,就是这样。但对于这样的作业,你不会得到指向数据的硬拷贝

指针不是数据。它们不包含数据。他们指向其他地方分配的数据


因此,正如另一个答案中所建议的,您实际寻找的可能是一个指针数组。如果是这样,你必须重新编写这个程序。

路由器的定义在哪里?路由器是一个非常基本的结构,id为一个无符号字符,名称为char*name。如果是这样的基本结构,你可以提出这个问题,以避免像我这样的评论。此外,还需要定义路由器。没有其他称为路由器的变量吗?
routers[new_router->id] = *new_router; // note *