String in einen Buffer schreiben
-
Also, irgendwie klappt es nicht, einen String in einen Buffer zu schreiben (mittels strcpy). Vllt. jetzt etwas mager ausgedrückt, ich weiß allerdings nicht was ich noch schreiben soll :P, deswegen hänge ich mal einen Code an, der in einen übergebenen TCHAR Buffer etwas reinschreiben soll.
Sofern ich den Buffer wieder an eine andere Funktion übergebe, klappt alles, aber ich weiß nicht wie man selber etwas rein schreibt, bzw. es kommt immer eine Debug Error und das Programm stürtzt ab
Sind zwar ein paar API - Funktionen drin, aber im groben geht es nur um C++void GetGamePath (HWND hWnd, TCHAR * szGame, TCHAR *& szBuffer) { static TCHAR szTempPath[1024], * szErrMsg = "N/A"; unsigned long iSize; HKEY hKey; if (szBuffer) delete [] szBuffer; szTempPath[0] = '\0'; strcat (szTempPath, "bla\\bla"); if (szGame[0] == 'W') strcat (szTempPath, "foo"); else strcat (szTempPath, "bar"); if (RegOpenKeyEx (HKEY_CURRENT_USER, szTempPath, 0, KEY_READ, &hKey)) { // Scheint zu funktionieren, stürtzt aber beim 2. Aufruf der Funktion ab szBuffer = new TCHAR[lstrlen (szErrMsg)]; *&szBuffer = szErrMsg; } else { if (RegQueryValueEx (hKey, "moep", 0, 0, NULL, &iSize)) { szBuffer = new TCHAR[lstrlen (szErrMsg)]; *&szBuffer = szErrMsg; } else { szBuffer = new TCHAR[iSize + 1]; RegQueryValueEx (hKey, "moep", 0, 0, (unsigned char *) szBuffer, &iSize); } } }
-
Das hat nichts mit Standard C++ zu tun.
-
TCHAR ist eine kompatible Version für Ansi- und Unicode Strings, dementsprechend solltest du auch Literale handeln. Dafür gibt es zB das Makro TEXT. Du solltest dann auch die entsprechenden Stringfunktionen (lstr...) benutzen.
plusman schrieb:
szTempPath[0] = '\0'; strcat (szTempPath, "bla\\bla");
Ist eigentlich Quatsch. Dann lieber gleich so
lstrcpy(szTempPath, TEXT("bla\\bla"));
plusman schrieb:
szBuffer = new TCHAR[lstrlen (szErrMsg)]; *&szBuffer = szErrMsg;
Du solltest bedenken, dass C-Strings ein "unsichtbares" Null-Zeichen am Ende benötigen. Dementsprechend viel Speicher solltest du auch reservieren. Keine Ahnung was du mit der 2 Zeile beabsichtigst, würde aber mal auf undefiniertes Verhalten tippen.
Besser soszBuffer = new TCHAR[lstrlen(szErrMsg) + 1]; lstrcpy(szBuffer, szErrMsg);