enum Choose { TcpHeartbeat = 200, TcpExeCmd }; // 定义结构体 struct DataPacket { int clientSockfd; enum Choose choose; char *cmdBuf; char *returnValue; }; memset(&ReceivePackets, 0, sizeof(ReceivePackets)); recv(clientSocket, &ReceivePackets, sizeof(ReceivePackets), 0) ; recv接收这个结构体,receivePackets.returnValue输出错误,帮我找出错误 ,请帮我修改代码,但是结构体不能改变
时间: 2024-04-12 07:29:17 浏览: 66
DNS-ENUM.rar_ENUM/DNS_dns _enum 域名解析
根据你提供的代码,结构体中的指针类型成员变量 `cmdBuf` 和 `returnValue` 没有被正确地分配内存空间,导致接收时无法正确地存储数据。为了解决这个问题,你可以尝试在接收结构体之前为这两个成员变量分配内存空间。下面是修改后的代码示例:
```c
enum Choose {
TcpHeartbeat = 200,
TcpExeCmd
};
// 定义结构体
struct DataPacket {
int clientSockfd;
enum Choose choose;
char cmdBuf[256];
char returnValue[256];
};
memset(&ReceivePackets, 0, sizeof(ReceivePackets));
recv(clientSocket, &ReceivePackets, sizeof(ReceivePackets), 0);
```
在这个修改后的代码中,我将 `cmdBuf` 和 `returnValue` 成员变量由指针类型改为了具有固定大小的字符数组。这样,在接收时就不需要为它们分配额外的内存空间。请注意,我假设这两个成员变量的最大长度为256,你可以根据实际情况进行调整。
阅读全文