从(void*)类型中取消引用结构

dam*_*mir 7 c void-pointers

我正在尝试使用void指针传递数据,然后将其转换为(pData*)类型.我究竟做错了什么?gcc给了我

gcc test.c错误:请求成员'filename',而不是结构或联合

typedef struct data {
        char *filename;
        int a;
} pData;

void mod_struct(void *data) {
        printf("%s\n",(pData *)data->filename); //error on this line
}

void main() {
        pData *data;
        data = (pData *) malloc(sizeof(pData));
        data->filename = (char *)malloc(100);
        strcpy(data->filename,"testing testing");
        data->a=1;
        mod_struct((void *)&data);
}
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 10

应该

printf("%s\n", ((pData *) data)->filename);
Run Code Online (Sandbox Code Playgroud)

-> 运算符的优先级高于类型转换运算符.

除此之外,您的电话mod_struct应该如下所示

mod_struct((void *) data);
Run Code Online (Sandbox Code Playgroud)

&你有没有做绝对没有任何意义.你为什么拿着什么data时候的地址data已经是你需要的指针?

  • ......甚至更好,只是`mod_struct(data)`. (4认同)