(作业问题) 我只是在学习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;
}
答案 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;缘故。