C-订阅值既不是数组,也不是数组索引的指针,也不是向量



(家庭作业问题)我只是在学习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
    }
 }

我搜索了很多带有相同错误消息的线程,但是它们都是没有声明数组的人,或者被建议以无符号的char为索引编号尝试,这就是我m已经在使用。会喜欢对此的一些见解。

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;
}

假设make_router动态分配结构,然后

routers[new_router->id] = *new_router; // note *

解决编译器误差。

但是,如果它们具有指针成员,则不能复制这样的结构。您说"路由器只是一个基本结构,具有iD的无符号字符,而名称的字符*"就是这样。但是有了这样的作业,您将不会获得尖头数据的硬拷贝。

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

,您实际上正在寻找的是一系列指针,正如另一个答案中所建议的那样。如果是这样,您必须重写此程序。

this:

struct router routers[ARRAY_SIZE] = {0};

表示routersARRAY_SIZE结构的数组。不是指向结构的指针,这就是这样:

routers[new_router->id] = new_router; 

试图分配到其中一个元素中。

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

struct router * routers[ARRAY_SIZE];
              ^
              |
             way
          important

edit :当然,我假设您刚刚省略了struct router的实际声明。将其包括在内,只是为了完整的缘故。

相关内容

  • 没有找到相关文章

最新更新