将void *变量分配给struct变量

时间:2014-06-29 16:46:44

标签: c sockets struct void-pointers

我有一个void *变量,我通过套接字连接。我需要将它转换为结构类型,它在客户端和服务器端都定义。

我在下面的代码中提供了相关作业的示例。在这个例子中,我为了简洁而省略了网络代码。

#include <stdio.h>
#include <stdlib.h>


typedef struct
{
    int x;
    int y;
} testStructType;


void someFunction(void* p)
{
    //some processing goes here.


}


int main(void) {

    testStructType testStruct;
    void* p;

    p=malloc(sizeof(testStructType));

    someFunction(p);


    testStruct=p;


    printf("%i ,%i",testStruct.x,testStruct.y);

    return EXIT_SUCCESS;
}

问题是我收到错误 分配到类型&#39; testStructType&#39;时不兼容的类型来自&#39; void *&#39;

我做错了什么? 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

你的意思是

testStruct = *(testStructType *)p;

要获得指针指向的内容,您需要取消引用

这是结构的副本。如果您实际上不需要副本,则可以直接访问原始文件:

testStructType *pt = p;
printf("%i ,%i", pt->x, pt->y);

请注意,您不是“通过套接字连接获取void *变量”。您通过套接字连接获取一些数据,而void *变量指向该数据。

答案 1 :(得分:0)

它是一个指针,所以读取的行

    testStructType testStruct;

应该阅读

    testStructType *testStruct;

然后以下代码需要更改为:

    testStruct = (testStructType *)p;

    printf("%d, %d", testStruct->x, testStruct->y);