我遇到以下问题。特别是,我试图从传递给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”应该打印到stdout。
编辑:
这是在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");
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
您需要将发送缓冲区增大一个字节,以便考虑char字符串的0终止。
char* buffer = (char*)malloc(strlen(sendString) + 1 + sizeof(int));