在C中,我正在阅读一个页面的html,但我希望持有数据的缓冲区是动态的。我知道我必须用循环和realloc
来做到这一点,但我不太确定我会如何去做。假设我有我的插座(sock
)已经打开考虑以下几点:RECV动态内存分配
char *buffer = ???, *tmp; //just my guess I'm fairly certain buffer cannot be NULL considering my recv loop...
int q = 0, c;
int i = 1; //buffer size
while(q < i)
{
c == recv(sock, buffer + q, i - q, 0);
if(c == SOCKET_ERROR) break;
i += c;
tmp = realloc(buffer, i * sizeof(char));
//if(!tmp) /*not important right now I can add error handling later*/;
buffer = tmp;
q += c;
}
这将是对如何实现我的目标,我最好的猜测,但我很怀疑这会工作,我只是需要一些有识之士或更正。
您可以使用'MSG_PEEK'标志参数来查看消息的实际大小,只需一次性分配,不需要'realloc'。 – Necrolis 2012-08-15 15:23:55
不是有需要的,但你可以给我一些关于你如何做到这一点的示例代码?并感谢您的回答。这与学校无关,与个人兴趣相关。 – 2012-08-15 15:28:03
@Necrolis:你能举个例子来更新我的代码吗?我不知道这样做。我缺少一些东西.'char缓冲区[128]; size = recv(sock,buffer,sizeof(buffer),MSG_PEEK);'sizeof(buffer)'总是小于或等于'size'。从不大于,对吗? – Jack 2012-08-20 18:08:02