Nullchar
-
Hallo,
um den Text eines Tabs eines TabControls als String zu bekommen, verwende ich folgenden Code:TCITEM tciTab; if (SendMessage(hControl, TCM_GETITEM, (WPARAM)Index, (LPARAM)&tciTab) == TRUE) { MessageBox(NULL, tciTab.pszText, NULL, NULL); tstring sTemp = tciTab.pszText; return sTemp; } else return TEXT("");Rückgabe soll ein tstring sein; d.h. bei mir std::wstring.
Aber nachdem die MessageBox korrekt den Text ausgegeben hat, kommt der FehlerUnhandled exception at 0x102307ed (msvcr80d.dll) in App.exe: 0xC0000005: Access violation reading location 0xcccccccc.
Dabei meint der Debugger, dass der Fehler in der Prozedur wcslen auftritt..
Ich vermute, dass liegt daran, dass pszText kein Nullchar als Abschluss hat..
Aber wieso funktioniert dann die MessageBox??MfG,
Max
-
Oh Mist!!
habe vergessen, das der Pointer tciTab.pszText ja auf noch gar nichts zeigt...
So funktionierts:
TCITEM tciTab; tstring sTemp; tciTab.mask = TCIF_TEXT; tciTab.cchTextMax = 150; tciTab.pszText = new TCHAR[150]; if (SendMessage(hControl, TCM_GETITEM, (WPARAM)Index, (LPARAM)&tciTab) == TRUE) sTemp = tciTab.pszText; else sTemp = TEXT(""); delete [] tciTab.pszText; return sTemp;
-
Du musst nicht new verwenden. Verwende doch einfach einen char[] der Größe auf dem Stack und weiße dies dem Zeiger zu.
-
Hallo,
wie würde das dann aussehen?
-
TCITEM tciTab; tstring sTemp; tciTab.mask = TCIF_TEXT; tciTab.cchTextMax = 150; TCHAR szBuffer[150]; tciTab.pszText = szBuffer; if (SendMessage(hControl, TCM_GETITEM, (WPARAM)Index, (LPARAM)&tciTab) == TRUE) sTemp = tciTab.pszText; else sTemp = TEXT("");
-
Achja, genau!

Danke!