hInt = InternetOpen(...);
hConn = InternetConnect(...);
hReq = HttpOpenRequest(...);
HttpSendRequest(...);
char szBuf[1024];
for (;;) {
bRead = InternetReadFile(..., szBuf, sizeof(szBuf), ...);
if (!bRead) break;
strcat(szPage, szBuf); // szPage - главный буфер, по нему и вопрос
}
... // тут парсим главный буфер
Как реализовать буфер?
Код:
Вопрос - как реализовать выделение памяти для такого буфера (szPage)??? Язык C. Интересно было бы посмотреть также asm-решение данной проблемы
Код:
hInt = InternetOpen(...);
hConn = InternetConnect(...);
hReq = HttpOpenRequest(...);
HttpSendRequest(...);
char szBuf[1024];
char *szPage=NULL, *tmp = NULL;
long pageSize=1024;
for (;;) {
bRead = InternetReadFile(..., szBuf, sizeof(szBuf), ...);
if (!bRead) break;
if (szPage == NULL) {
szPage = (char*)malloc(pageSize);
if (szPage == NULL)
exit(EXIT_FAILURE);
szPage[0]=0;
}
else {
pageSize+=1024;
tmp=realloc(szPage, pageSize);
if (tmp == NULL)
exit(EXIT_FAILURE);
szPage=tmp;
}
strcat(szPage, szBuf); // szPage - главный буфер, по нему и вопрос
}
//....
free(szPage);
hConn = InternetConnect(...);
hReq = HttpOpenRequest(...);
HttpSendRequest(...);
char szBuf[1024];
char *szPage=NULL, *tmp = NULL;
long pageSize=1024;
for (;;) {
bRead = InternetReadFile(..., szBuf, sizeof(szBuf), ...);
if (!bRead) break;
if (szPage == NULL) {
szPage = (char*)malloc(pageSize);
if (szPage == NULL)
exit(EXIT_FAILURE);
szPage[0]=0;
}
else {
pageSize+=1024;
tmp=realloc(szPage, pageSize);
if (tmp == NULL)
exit(EXIT_FAILURE);
szPage=tmp;
}
strcat(szPage, szBuf); // szPage - главный буфер, по нему и вопрос
}
//....
free(szPage);
Огромное спасибо. Просто думал что можно организовать другим путем (не используя malloc() realloc()). Да, и нужно ли освобождать переменную tmp в твоем коде?
tmp освобождать не надо : она служит для проверки успешности перераспределения памяти
А ещё лучше (если дело касается Windows) - резервировать память, а затем выделять её при необходимости(обе операции осуществляются с помощью VirtualAllocEx()). Можа даже, например, выделять память по мере поступления новых данных, получая, при этом, неразрывный блок информации. Дж. Рихтер в одной из своих книг подробнейшим образом описывал приёмы работы с выделением памяти в Windows (самый клёвый пример на эту тему - SpreadSheet по типу MS Excel).
Спасибо конечно, но не могли бы вы подсказать в какой именно книге? (название)