0

我遇到以下问题。特别是,我试图从传递给 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");
}

任何帮助,将不胜感激。

4

1 回答 1

0

您需要使发送缓冲区大一个字节以说明 char 字符串的 0 终止。

char* buffer = (char*)malloc(strlen(sendString) + 1 + sizeof(int));
于 2014-05-16T04:34:58.043 回答