c语言 - 如何修复"request for member ‘rank’ in something not a structure or union"?



>我正在尝试用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));

你为什么宣布argtabvoid **?如果你需要一个结构数组,你必须这样声明它:

struct argnum *argtab = malloc(sizeof(struct argnum) * (argc-1));

现在编译器意识到argtab不仅仅是一个"字节袋",而是一个它知道其字段的结构。

此外,尽管允许在函数内声明结构,但也很不常见。

相关内容

最新更新