(家庭作业问题)我只是在学习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};
表示routers
是ARRAY_SIZE
结构的数组。不是指向结构的指针,这就是这样:
routers[new_router->id] = new_router;
试图分配到其中一个元素中。
如果make_router()
正在动态分配内存,则修复程序可能是将数组声明更改为指针数组:
struct router * routers[ARRAY_SIZE];
^
|
way
important
edit :当然,我假设您刚刚省略了struct router
的实际声明。将其包括在内,只是为了完整的缘故。