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