我遇到以下问题。特别是,我试图从传递给 recvfrom() 方法的缓冲区参数中提取一个 uint32_t 和一个 char* 。此时,可以使用以下代码正确提取整数:
recvfrom(s, buf, buffer_size, 0, (struct sockaddr*)&si_other, &slen);
uint32_t recv_int = ntohl(*(int*)buf);
char* recv_char = (char*)malloc(6); // NOTE: The original string was "Hello", which has 6 bytes.
strcpy(recv_char, ((char*)buf + sizeof(uint32_t)));
printf("The returned values are %d %s\n", recv_int, recv_char);
但是,当我如上所示执行 printf 时,只有 recv_int 有值。recv_char 是一个空白字符串。但是,我最初将“Hello”存储在缓冲区中,因此应该将“Hello”打印到标准输出。
编辑:
这是在 sendto() 中使用的代码:
uint32_t my_int = 3;
char* sendString = "Hello";
char* buffer = (char*)malloc(strlen(sendString) + sizeof(int));
memcpy(buffer, &my_int, sizeof(int));
strcpy((char*)buffer + sizeof(int), sendString);
if (sendto(s, buffer, sizeof(int) + strlen(sendString), 0, (struct sockaddr*)&si_other, slen) == -1)
{
printf("Issue with send\n");
}
任何帮助,将不胜感激。