2015-04-07 7 views
1

У меня есть следующий код:Случайные символы в WinInet выходе

#include <wininet.h> 
#include <cstdlib> 
#include <iostream> 
#include <windows.h> 
#include <string.h> 

using namespace std; 


int main(int argc, char *argv[]) 
{ 
    HINTERNET connect = InternetOpen("MyBrowser",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0); 

    if(!connect){ 
     cout<<"Connection Failed or Syntax error"; 
     return 0; 
    } 

HINTERNET OpenAddress = InternetOpenUrl(connect,"http://shahriar.byethost9.com/com2.html", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0); 

    if (!OpenAddress) 
    { 
     DWORD ErrorNum = GetLastError(); 
     cout<<"Failed to open URL \nError No: "<<ErrorNum; 
     InternetCloseHandle(connect); 
     return 0; 
    } 

    char DataReceived[4096]; 
    DWORD NumberOfBytesRead = 0; 
    while(InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead) 
    { 
      cout << DataReceived; 
    } 

    InternetCloseHandle(OpenAddress); 
    InternetCloseHandle(connect); 

    cin.get(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

Он захватывает исходный код http://shahriar.byethost9.com/com2.html и выводит на консоль.

Проблема заключается в том, что исходный код моей страницы <h5>paint</h5>, но программа печатает: <h5>paint</h5>¥ (последний символ меняется каждый раз, когда я редактирую свой источник страницы).

После редактирования моего источника страницы он стал: <h5>mspaint</h5>, но программа снова печатала старый исходный код (<h5>paint</h5>¥).

+2

Либо не считать буфера нуль-терминатором, когда вы используете его или нуль-прекратить это самостоятельно. У вас есть фактическая длина строки. – chris

ответ

1

Вы пытались накопить буфер таким образом:

cout << std::string(DataReceived, NumberOfBytesRead); 
+0

Спасибо большое! Это сработало для меня! –

 Смежные вопросы

  • Нет связанных вопросов^_^