Объявление переменной
char xyz[] = "Hello World!";
скажет компилятору поместить содержимое строки в стек.Конечно, стек исчезает, когда ваша функция возвращает.
Так что в вашем случае:
char holdBuff[] = "";
...
*content = holdBuff;
Это говорит компилятору создать строку длины один (терминатор NULL) в виделокальная переменная.То, что вы установили значение content
равным holdBuff
, не означает, что то, на что указывал holdBuff
, больше не существует.
Вы должны исправить две вещи.Во-первых, вы должны использовать strcpy()
или аналогичную функцию.Во-вторых, вы должны выделить достаточно места для holdBuff
.
Пример:
char holdBuff[4096]; // or some other sufficiently large size
...
*content = malloc (strlen(holdBuff) + 1);
strcpy (*content, holdBuff);
Затем вам нужно будет free(content)
в main()
, как только вы закончите с ним.
Теперь о том, как на самом деле выполнить конкатенацию: ваша производительность будет намного лучше, если вы вообще забудете об использовании szBuff
и просто напишите прямо в holdBuff
.
char* temp = holdBuff;
while (InternetReadFile(hRequest, temp, 1024, &bytesRead) == TRUE && bytesRead > 0)
{
temp += bytesRead;
}
*temp = '\0'; // manually append NULL terminator
Now holdBuff
будет иметь данные, которые вы хотите, без необходимости промежуточной конкатенации.