这样子写就可以接收到数据么,因为我没有看到你有给他们分配内存
时间: 2024-04-12 20:29:01 浏览: 23
非常抱歉,我之前的回答有误。确实,我没有包含为字符串指针字段分配内存的部分。在接收结构体中的字符串指针字段时,你需要进行内存分配。
以下是修复后的代码示例:
```c
enum Choose {
TcpHeartbeat = 200,
TcpExeCmd
};
// 定义结构体
struct DataPacket {
int clientSockfd;
enum Choose choose;
char cmdBuf[100]; // 修改为固定大小的字符数组
char returnValue[100]; // 修改为固定大小的字符数组
};
struct DataPacket ReceivePackets;
// 接收结构体
if (recv(clientSocket, &ReceivePackets, sizeof(ReceivePackets), 0) < 0) {
perror("Failed to receive struct");
exit(EXIT_FAILURE);
}
// 分配内存给字符串指针字段
ReceivePackets.cmdBuf = malloc(strlen(ReceivePackets.cmdBuf) + 1);
ReceivePackets.returnValue = malloc(strlen(ReceivePackets.returnValue) + 1);
// 检查内存分配是否成功
if (ReceivePackets.cmdBuf == NULL || ReceivePackets.returnValue == NULL) {
perror("Memory allocation failed");
exit(EXIT_FAILURE);
}
// 接收字符串指针字段
if (recv(clientSocket, ReceivePackets.cmdBuf, strlen(ReceivePackets.cmdBuf), 0) < 0) {
perror("Failed to receive cmdBuf");
exit(EXIT_FAILURE);
}
if (recv(clientSocket, ReceivePackets.returnValue, strlen(ReceivePackets.returnValue), 0) < 0) {
perror("Failed to receive returnValue");
exit(EXIT_FAILURE);
}
printf("returnValue: %s\n", ReceivePackets.returnValue);
// 使用完后记得释放内存
free(ReceivePackets.cmdBuf);
free(ReceivePackets.returnValue);
```
在这个例子中,我们使用 `malloc` 为字符串指针字段 `cmdBuf` 和 `returnValue` 分配了足够的内存,并在使用完后释放了这些内存。
非常抱歉给你带来的困扰,希望这次的回答能够解决你的问题。如果还有其他问题,请随时提问。
相关推荐
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)