Skracanie stringa

AR
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:4
0

Witam. Mam problem ze skróceniem stringa, który sobie pobrałem z rejestru.

Kopiuj
HKEY hkSoftware;
HKEY hkTest;
LONG result;
string buf;
DWORD dwBufSize = 255;
DWORD dwRegsz = REG_SZ;
int a;

result = RegOpenKeyEx( HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_ALL_ACCESS, & hkSoftware );
if( result == ERROR_SUCCESS ) {
        result = RegOpenKeyEx( hkSoftware, "SAMP", 0, KEY_ALL_ACCESS, & hkTest );
        if( result == ERROR_SUCCESS ) {
                result = RegQueryValueEx(hkTest, "gta_sa_exe", NULL, & dwRegsz,( LPBYTE ) buf.c_str(), & dwBufSize );
                if( result == ERROR_SUCCESS ) {
                       sciezka=buf;
                       sciezka.resize(sciezka.size()- 10); //Tutaj wywala mi error podczas działania programu...
                       MessageBox(NULL,sciezka.c_str(),"TEST",MB_ICONINFORMATION);
                       RegCloseKey(hkTest);
                       RegCloseKey(hkSoftware);
                }
          }
} 

Nie mam zielonego pojęcia co robię źle. Byłbym wdzięczny, gdyby ktoś mi pomógł :)
http://i45.tinypic.com/1zbtrly.jpg

mychal
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Przedmonitorze Górne
1
Kopiuj
result = RegQueryValueEx(hkTest, "gta_sa_exe", NULL, & dwRegsz,( LPBYTE ) buf.c_str(), & dwBufSize );

To jest jakiś WTF. Nie możesz w ten sposób wpisać danych do stringa... Użyj tablicy znaków.

EDIT: z dokumentacji c_str:

The returned array points to an internal location with the required storage space for this sequence of characters plus its terminating null-character, but the values in this array should not be modified in the program and are only guaranteed to remain unchanged until the next call to a non-constant member function of the string object.


I fart u die.
edytowany 2x, ostatnio: mychal
AR
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:4
0

Zależy mi właśnie, aby to był string. Tylko nie wiem jak tam wpisać te dane do niego.

RE
Nie da się uzyskać wskaźnika do ciągu znaków, który można modyfikować w klasie std::string. Deal with it.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 11 godzin
1
Kopiuj
string str;
char *buf; // albo wchar_t jeśli unicode
result = RegQueryValueEx(blabla, buf, blabla);
str = buf;
RE
ten kod też jest błędny
Azarien
to popraw. ja błędu nie widzę, poza oczywiście "blabla"
RE
nie dość, że typ zły, bo LPBYTE, który przyjmuje ta funkcja to wskaźnik do unsigned char to jeszcze chcesz przesłać wskaźnik do jakiegoś kosmosu zamiast do bufora, który to ty powinieneś zaalokować.
AR
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:4
0

Jakie to banalne... Zbyt "głębokiego" rozwiązania szukałem, dzięki za pomoc. Do zamknięcia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.