被遗忘的角落——但必须要搞清楚!(可加分)

tiancanshi 2002-08-13 09:28:24
在socket编程中,经常会用到send(),recv(),sendto(),recvfrom()这些函数。
它们的参数有一个共同点,就是都包含一个指向缓冲区的指针,和该缓冲区长度两项。
例如:int recvfrom(SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR *from,
int FAR *fromlen
);
中的参数2和3.
经常使用也没问题,但最近做一个程序时,buf定义为一个结构体指针,比Len的长度小,
就出现了系统错误。当buf指向的结构体长度大于len时,正常执行。
我在想:
到底这两个参数之间有什么关系?在平时做程序时,这个BUF可以设定为任何形式的指针
(指向一个字节,一个数组,一个结构体等等),难道它只是标志一下缓冲区的起始位置??并没有大小限制??len只是起一个长度限制??如果这样,len和这个指针所指向
的对象的大小存在什么要求??
望高手明示!!!
...全文
24 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_lau 2002-08-14
  • 打赏
  • 举报
回复
越界了
ruanjiandev 2002-08-13
  • 打赏
  • 举报
回复
如果你有SDK文档,你可以查一下。
buf 是缓冲区的起始位置,没错。len 是指缓冲区的长度。如果你的buf是
struct AAA
{...}
len 因该为 sizeof(AAA)
Bind 2002-08-13
  • 打赏
  • 举报
回复
都越界了还能不出错?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧