我有一个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;
我做错了什么? 有人可以帮帮我吗?
答案 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);