我正在尝试在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[i]
之外,您还必须分配每个argtab
。
您最好将argtab
分配为
struct argnum *argtab = malloc( sizeof *argtab * (argc - 1));
然后使用
.
而不是->
访问每个成员:argtab[i].rank = i;
因为每个
argtab[i]
的类型都是struct argnum
,而不是struct argnum *
。关于c - 如何解决“在非结构或 union 的情况下要求成员'等级'的问题”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58050603/