错误的缓冲区长度(const char FAR *)

时间:2012-05-20 18:12:05

标签: c++ winapi sockets buffer

我有一个问题,我绕过函数recv(ws2_32.dll)并尝试读取数据。我得到leng parametr - 17但在实际缓冲区只有2个字节的长度。

我的代码:

int WINAPI OwnSend(SOCKET s, const char FAR *buff, int leng, int flags )
{
    //why 'leng'==17 and (sizeof(char) * strlen(buff) + 1) == 2?
    return pTrampolineSend(s, buff, leng, flags);
}

谢谢!

2 个答案:

答案 0 :(得分:5)

问题是strlen()没有那么有用。您无法通过将其中的任何内容解释为字符串来判断缓冲区的长度。套接字可以发送和接收二进制数据。尚未初始化的缓冲区可能包含任何内容。

buff[1]

恰好是0字节

答案 1 :(得分:1)

len参数是您需要提供的。您应该为缓冲区参数分配内存,并告诉您使用len参数进行了多少分配