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

Posted

技术标签:

【中文标题】缓冲区长度错误(const char FAR*)【英文标题】:Wrong buffer length (const char FAR*) 【发布时间】:2012-05-20 18:12:04 【问题描述】:

我有一个问题,我绕过函数 recv(ws2_32.dll) 并尝试读取数据。我得到了长度参数 - 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);

谢谢!

【问题讨论】:

您将不得不向我们展示更多代码。此外,FAR 修饰符已经过时了大约 15 年。帮自己一个忙,删除它。 sizeof(char)==1 定义 【参考方案1】:

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

buff[1] 恰好有一个 0 字节

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于缓冲区长度错误(const char FAR*)的主要内容,如果未能解决你的问题,请参考以下文章

指针类型转换:对缓冲区长度的影响?

错误:无法使用“const char [34]”类型的左值初始化“const char”类型的返回对象

清空缓存区,避免对缓存区中残留数据对下次读入造成影响

奇怪的错误,错误:从‘const char*’到‘char’的无效转换[-fpermissive]

无法将字符串转换为 const char/string* 到 int*

c++错误:从不兼容的类型'const char *'分配给'char *'