C 下标值既不是数组,也不是数组索引处的指针或向量
家庭作业问题 我只是在学习C语言,我正在制作一个程序,从一个文件中读取数据,创建该数据的路由器,并将指向路由器的指针放在一个255大小的数组中,但我一直在试图将它们添加到数组中的行中得到标题错误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
#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 *