CString.GetBuffer() Problem
-
Ich hab 2 class members
1. CStringA m_cstringa;
2. char m_char_buffer[100];Nun muss ich immer wieder chars_to_copy von m_char_buffer nach m_cstringa kopieren:
LPSTR pb = m_cstringa.GetBuffer( chars_to_copy+1 ); errno_t err = strncpy_s( pb, chars_to_copy+1, m_char_buffer, chars_to_copy ); //pb[chars_to_copy] = '\0'; //m_cstringa.ReleaseBuffer( -1 ); m_cstringa.ReleaseBuffer();
Weder der auskommentierte code noch ReleaseBuffer(); funktionieren zuverlässig.
// err ist übrigens okint len = m_cstringa.GetLength();
ergibt die korrekte Länge, aber manchmal ist m_cstringa trotzdem leer, manchmal nicht. Das ist das Problem.
Was läuft da falsch?
Danke.
-
Du weißt schon, daß der Puffer, nach "ReleaseBuffer()", seine Gültigkeit verliert
// example for CString::ReleaseBuffer CString s; s = "abc"; LPTSTR p = s.GetBuffer( 1024 ); strcpy(p, "abc"); // use the buffer directly ASSERT( s.GetLength() == 3 ); // String length = 3 s.ReleaseBuffer(); // Surplus memory released, p is now invalid. ASSERT( s.GetLength() == 3 ); // Length still 3
-
Exhumed schrieb:
Du weißt schon, daß der Puffer, nach "ReleaseBuffer()", seine Gültigkeit verliert
Klar ich will ja danach nicht den buffer weiterbenutzen nur cstringa.
Ich will nur nach CStringA m_cstringa; einen Inhalt aus einem char-array/char-pointer (je nachdem) kopieren.
Alle member-variablen werden immer wieder zurückgesetzt und dann irgendeine Anzahl von bytes kopiert.
-
EOP schrieb:
Exhumed schrieb:
Du weißt schon, daß der Puffer, nach "ReleaseBuffer()", seine Gültigkeit verliert
Klar ich will ja danach nicht den buffer weiterbenutzen nur cstringa.
Hab ich mir auch gedacht
Ich habe versucht den Code zu reproduzieren. Bei mir funktioniert es. Verwende aber nur "strncpy", weil ich noch Visual C++ 6.0 benutze. *schäm*.