在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