char und string Problem



  • Hallo Community

    Mein Code bisher:

    HINTERNET hRootHandle, hOpenUrlHandle;
        hRootHandle = InternetOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
        hOpenUrlHandle = InternetOpenUrl(hRootHandle,"http://127.0.0.1/test.txt",NULL,0,INTERNET_FLAG_RAW_DATA,0);
    
    //BOOL InternetReadFile(
    //  __in   HINTERNET hFile,
    //  __out  LPVOID lpBuffer,
    //  __in   DWORD dwNumberOfBytesToRead,
    //  __out  LPDWORD lpdwNumberOfBytesRead
    //);
    
        char szBuf[5];
        DWORD ReadSize;
    
        InternetReadFile(hOpenUrlHandle,&szBuf,sizeof(szBuf),&ReadSize);
        szBuf[sizeof(ReadSize)] = 0x00; //Ende
    
        cout << szBuf;
    
        InternetCloseHandle(hOpenUrlHandle);
        InternetCloseHandle(hRootHandle);
    

    Da char ja noch von C stammt (richtig oder?), wollte ich char mit String ersetzen.

    Mit szBuf[5] lese ich ja 5 Zeichen im Code aus.
    Jetzt möchte ich dies mit string szBuf[5]; ersetzen.

    Wenn ich es so mache kommt aber als Antwort nicht der Text sondern "0x28feb4". (Eine Speicheradresse?)

    Wäre froh wenn jemad mir das erklären kann wie ich es am besten im C++ Style machen kann da ich ja sogut wie möglich C meiden wollte..

    Grüsse, Genius



  • std::string buffString(szBuf);
    


  • Hallo

    Danke für die schnelle Antwort.

    Nun habe ich es so (Danke schonmal für den Tipp):

    char szBuf[5];
        DWORD ReadSize;
    
        InternetReadFile(hOpenUrlHandle,&szBuf,sizeof(szBuf),&ReadSize);
        szBuf[sizeof(ReadSize)] = 0x00;
    
        string buffString(szBuf);
        cout << buffString;
    

    Gibt es eine Möglichkeit, direkt das char array mit einem string array zu tauschen?

    Grüsse, Genius



  • Wie meinst du das? In der InternetReadFile()-Funktion? Das geht nicht, weil die Funktion ein char-Array erwartet und aus 'nem String kannst du nur ein const char-Array machen... Oder wie meinst du das?

    Willst du mit

    szBuf[sizeof(ReadSize)] = 0x00;
    

    aus dem char-Array einen nullterminierten String machen? Wenn ja, dann würde ich die Zeile weglassen, solange du weiter mit dem neuen String und nicht mit'm buff arbeitest.



  • Hallo

    Okay, danke für deine Erklärung.
    Also InternetReadFile() will ein char array.

    Jetzt meine 2 Fragen:
    1 -> Wo sehe ich, das die Funktion ein char array möchte?
    2 -> Gibt es eine bessere Möglichkeit als InternetReadFile() um einen Text im Internet ausulesen? Auf externe librarys wie cURL möchte ich verzichten.

    Grüsse



  • Genius schrieb:

    Wo sehe ich, das die Funktion ein char array möchte?

    In der Dokumentation zu dieser Funktion, oder auf neudeutsch: RTFM
    In diesem Fall die MSDN.
    Also 'InternetReadFile msdn' bei Google eingeben und Ergebnisse ansehen:

    BOOL InternetReadFile(
      __in   HINTERNET hFile,
      __out  LPVOID lpBuffer,
      __in   DWORD dwNumberOfBytesToRead,
      __out  LPDWORD lpdwNumberOfBytesRead
    );
    


  • 1 -> Ich bin davon ausgegangen, dass es char-Array braucht, das stimmt aber nicht. Die ganzen WinAPI-Funktionen kannst du auf MSDN nachschlagen.
    2 -> muss passen.



  • Hallo

    Ich danke auch sehr für die Antworten meiner Anfänger Fragen.

    Vielen Dank 🙂

    Grüsse, Genius


Anmelden zum Antworten