Данные, которые вы получаете, являются строкой в стиле C, то есть массивом символов с нулевым символом в конце. Важной частью здесь является то, что строка из 5 символов на самом деле требует массив размером 6, например:
"hello"
состоит из массива из 6 символов, 'h'
, 'e'
, 'l'
, 'l'
, 'o'
, '\0'
.
OutputDebugString
будет проходить через массив, печатающий символы, пока не достигнет '\0'
.
В этом случае вы нигде не выделяете место для завершения '\0'
, поэтому OutputDebugString
будет продолжать работать до тех пор, пока в памяти не окажется '\0'
(или пока он не достигнет памяти, к которой не разрешен доступ ).
Изменить этот бит:
char * buffer = new char[size]; // size = 5
InternetReadFile(request, buffer, size, &dwRead);
будет
char * buffer = new char[size + 1]; // size = 5, allocate 6 chars
InternetReadFile(request, buffer, size, &dwRead);
buffer [size] = '\0';