Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <windows.h> #include <stdio.h> #include <iostream> #include <string> int main(int argc, char **argv) { unsigned char temp[99] = ""; char save[] = ""; char var[99]; unsigned long size = sizeof(temp); std::string str; HKEY hKey; RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Blizzard Entertainment\\World of Warcraft", &hKey); RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size); RegCloseKey(hKey); std::cout << "Value: "; for (int i=-1; i<99; i++) { i++; std::cout << temp[i]; save[i] = temp[i]; } strcpy(var, save); str = var; std::cout << str << std::endl; system("pause"); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 |
#include <sstream> std::stringstream a; a << value; a.str(); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
// Direkt in str ablegen RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, str.c_str(), &size); // Oder erst in temp ablegen, dann str zuweisen RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size); str += temp; |
Zitat von »"TrikkieMikkie"«
Kannst ja mal folgendes ausprobieren:
C-/C++-Quelltext
1 2 3 4 5 6 7 // Direkt in str ablegen RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, str.c_str(), &size); // Oder erst in temp ablegen, dann str zuweisen RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size); str += temp;
Zitat von »"TrommlBomml"«
ersteres geht nicht, da die fkt. c_str() const ist. zweiteres wäre der weg den ich auch gehen würde.
Zitat
Sobald ich das Programm starte, zeigt mir mein sting "str" irgendwelche Hyroglyphen.
Quellcode |
|
1 2 3 4 5 |
for( int i=-1 ... 99; i++ ) i++; temp[i]; char save[] = ""; save[i] = temp[i]; |
Zitat von »"knivil"«
Quellcode
1 2 3 4 5 for( int i=-1 ... 99; i++ ) i++; temp[i]; char save[] = ""; save[i] = temp[i];
Erklaere mit doch mal die Zeilen. Erklaere mir auch mal, warum du C-API und C++ mischt. Erklaere mir doch mal, warum du versuchst, alles 3 mal hin- und herzukopieren. Die paar Deilen sind sowas von Muell (und es liegt in erster Linie nicht an strcpy)! Du kannst kein strcpy mit einem Objekt der Klasse String benutzen. Nullterminierte Zeichenketten a la char* tmp kannst du aber mit std::string str(tmp) in Stringobjekte verwandeln.
Zitat
// Oder erst in temp ablegen, dann str zuweisen
RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size);
str += temp;
Quellcode |
|
1 |
error C2679: Binärer Operator '+=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'unsigned char [99]' akzeptiert (oder keine geeignete Konvertierung möglich) |
C-/C++-Quelltext |
|
1 |
#include <string> |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <windows.h> #include <stdio.h> #include <iostream> #include <string> int main(int argc, char **argv) { // Vars deklarieren unsigned char temp[99] = {" "}; unsigned long size = sizeof(temp); std::string str; HKEY hKey; // Pfad aus registry lesen RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Blizzard Entertainment\\World of Warcraft", &hKey); RegQueryValueEx(hKey, L"InstallPath", NULL, NULL, temp, &size); RegCloseKey(hKey); // var und save je nach größe von temp paramterieren char save[sizeof(temp)+1]; char var[sizeof(temp)+1]; // Pfad ausgeben, mittels for Schleife std::cout << "value: "; for (int i=-1; i<99; i++) { i++; std::cout << temp[i]; save[i] = temp[i]; } // Versuchen ein gespeichertes char array zu speichern was nicht klappt, sondern zwar alles ausgibt, // aber mit Hyroglyphen dazwischen std::cout << save << std::endl; system("pause"); return 0; } |
Werbeanzeige