【发布时间】:2014-08-20 02:49:28
【问题描述】:
我有一个通过套接字连接获得的 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;
}
问题是我得到错误 从 'void*' 分配给类型 'testStructType' 时类型不兼容
我做错了什么? 有人可以帮帮我吗?
【问题讨论】:
-
赋值
testStruct=p会失败,因为testStruct是一个结构,p是一个通用指针。实际上,您可能根本不需要使用通用指针(即void *)。只需使用指向结构的指针,并尽可能多地使用它。许多套接字接收/发送函数需要char *来获取数据,然后在需要时将指针转换为结构。如果一个函数需要一个泛型指针,那么根本不需要强制转换。 -
testStruct=p;:与(testStructType) = (void*)不同的类型,改为testStruct=*(testStructType *)p; -
当然,套接字两端的程序应该使用相同版本的相同编译器进行编译,使用相同的标志调用,并在相同的操作系统上运行。只需稍作改动即可使两端的结构不兼容。
标签: c sockets struct void-pointers