cmdBuf 和 returnValue必须为char *
时间: 2024-04-12 09:29:21 浏览: 126
cmdbuf.nvim:Neovim的备用命令行窗口插件
如果 `cmdBuf` 和 `returnValue` 必须为 `char *` 类型,并且需要通过接收来动态分配内存空间,你可以按照以下方式修改代码:
```c
enum Choose {
TcpHeartbeat = 200,
TcpExeCmd
};
// 定义结构体
struct DataPacket {
int clientSockfd;
enum Choose choose;
char *cmdBuf;
char *returnValue;
};
// 接收结构体数据
struct DataPacket ReceivePackets;
memset(&ReceivePackets, 0, sizeof(ReceivePackets));
// 接收 cmdBuf 的长度
int cmdBufLength = 0;
recv(clientSocket, &cmdBufLength, sizeof(cmdBufLength), 0);
// 分配内存空间并接收 cmdBuf 数据
ReceivePackets.cmdBuf = malloc(cmdBufLength + 1); // +1 用于存储结尾的 '\0'
if (ReceivePackets.cmdBuf) {
memset(ReceivePackets.cmdBuf, 0, cmdBufLength + 1);
recv(clientSocket, ReceivePackets.cmdBuf, cmdBufLength, 0);
}
// 接收 returnValue 的长度
int returnValueLength = 0;
recv(clientSocket, &returnValueLength, sizeof(returnValueLength), 0);
// 分配内存空间并接收 returnValue 数据
ReceivePackets.returnValue = malloc(returnValueLength + 1); // +1 用于存储结尾的 '\0'
if (ReceivePackets.returnValue) {
memset(ReceivePackets.returnValue, 0, returnValueLength + 1);
recv(clientSocket, ReceivePackets.returnValue, returnValueLength, 0);
}
// 使用接收到的数据
printf("Received cmdBuf: %s\n", ReceivePackets.cmdBuf);
printf("Received returnValue: %s\n", ReceivePackets.returnValue);
// 释放内存空间
free(ReceivePackets.cmdBuf);
free(ReceivePackets.returnValue);
```
在这个修改后的代码中,我假设在接收结构体之前,先接收了 `cmdBuf` 和 `returnValue` 的长度。然后,根据接收到的长度动态分配了足够的内存空间,并使用 `recv()` 函数接收数据。最后,使用接收到的数据进行操作,并在最后释放了分配的内存空间。请确保在发送结构体之前,先发送 `cmdBuf` 和 `returnValue` 的长度,并在接收时按照相同的顺序进行接收。
阅读全文