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

时间:2017-09-27 13:34:42

标签: 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 *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
    }
 }

我用相同的错误消息搜索了很多线程,但是他们都是没有声明数组的人,或者建议用unsigned char作为索引号来尝试它,这就是我的意思我已经在使用了。希望对此有所了解。

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

2 个答案:

答案 0 :(得分:1)

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

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

解决编译器错误。

但是,如果它们具有指针成员,则无法复制此类结构。你说“路由器只是一个基本结构,带有一个用于id的unsigned char,一个用于name的char *”,所以情况就是如此。但是通过这样的作业,你不会得到指向数据的硬拷贝。

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

所以你正在寻找的是一个指针数组,正如另一个答案中所建议的那样。如果是这样,你必须重新编写这个程序。

答案 1 :(得分:0)

此:

less -R

表示struct router routers[ARRAY_SIZE] = {0}; routers个结构的数组。不是指向结构的指针,这就是:

ARRAY_SIZE

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

如果routers[new_router->id] = new_router; 动态分配内存,修复可能是将数组声明更改为指针数组:

make_router()

编辑:当然,我认为你遗漏了某个地方struct router * routers[ARRAY_SIZE]; ^ | way important 的实际声明。包含它可能是一个好主意,只是为了完整性#39;缘故。