>我正在尝试用C创建一个结构数组,我想初始化它。
但是我收到此错误,我不知道如何解决它。
int main(int argc, char **argv){
struct argnum{
int rank;
char fileNamne[10];
};
void** argtab= malloc(sizeof(struct argnum)*(argc-1));
for(int i=0; i<argc-1; i++){
argtab[i]->rank=i;
argtab[i]->filename=argv[i];
}
}
Exercise2.c: In function ‘main’: Exercise2.c:22:18: error: request for member ‘rank’ in something not a structure or union argtab[i]->rank=i; ^ Exercise2.c:23:18: error: request for member ‘filename’ in something not a structure or union argtab[i]->filename=argv[i]; ^
如果argtab
的类型是void **
,则argtab[i]
的类型是void *
,它不是指向结构或联合类型的指针。
请注意,将argtab
类型从void **
更改为struct argnum**
是不够的,因为除了分配argtab
之外,您还必须分配每个argtab[i]
。
您可能最好将argtab
分配为
struct argnum *argtab = malloc( sizeof *argtab * (argc - 1));
然后使用.
而不是->
来访问每个成员:
argtab[i].rank = i;
因为每个argtab[i]
都是类型struct argnum
,而不是struct argnum *
。
void** argtab= malloc(sizeof(struct argnum)*(argc-1));
你为什么宣布argtab
为void **
?如果你需要一个结构数组,你必须这样声明它:
struct argnum *argtab = malloc(sizeof(struct argnum) * (argc-1));
现在编译器意识到argtab
不仅仅是一个"字节袋",而是一个它知道其字段的结构。
此外,尽管允许在函数内声明结构,但也很不常见。