[C++] Text uit een editbox opslaan in een string

Pagina: 1
Acties:

  • Hmail
  • Registratie: April 2003
  • Laatst online: 13:54

Hmail

Doet ook maar wat.

Topicstarter
Ik ben bezig met het schrijven van een simpel dialoogvenstertje, wat de text uit een textbox moet weergeven in een MessageBox. Alleen, wat ik ook doe, het programma blijft vastlopen.
Hier is een stukje code:

code:
1
2
3
LPSTR test1234;
GetDlgItemText(TDlg, IDC_EDIT1, test1234, 100);
MessageBox(0, test1234, "Dit typte je: ", MB_OK);


Wat is hier fout aan? Ik kan er zelfs op de MSDN-site niets over vinden :?

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 17:06
Euhm ik kan het verkeerd hebben hoor (C++ is alweer tijdje geleden voor mij), maar probeer dit eens:
code:
1
2
3
char test1234[100];
GetDlgItemText(TDlg, IDC_EDIT1, test1234, 100);
MessageBox(0, test1234, "Dit typte je: ", MB_OK);

[ Voor 4% gewijzigd door Daspeed op 15-05-2005 19:01 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Wat gaat er mis? Wat bedoel je met vastlopen? Krijg je een error melding? Zo welke en op welke regel? En welke zaken heb je nu zelf al geprobreerd? Zie ook P&W FAQ - De "quickstart"

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
Als je de documentatie voor GetDlgItemText() opzoekt zie je dat het derde argument een pointer naar een buffer moet zijn waar het resultaat in opgeslagen kan worden. Je hebt op dit moment wel een variabele van het type LPSTR (een char pointer dus) maar die wijst niet naar een buffer waarin geschreven kan worden want je hebt hiervoor helemaal geen geheugen gealloceerd.

Dus of dynamisch alloceren op de heap (en dus netjes opruimen):

code:
1
2
3
4
5
6
7
LPSTR   test1234 = new CHAR[100];

// ....
// code die test1234 gebruikt
// ....

delete[] test1234;


of gewoon op de stack:

code:
1
CHAR   test1234[100];


Het laatste is in dit geval wel zo makkelijk. Natuurlijk wel even kijken of die 100 ook groot genoeg is.

  • Hmail
  • Registratie: April 2003
  • Laatst online: 13:54

Hmail

Doet ook maar wat.

Topicstarter
IrishMaiden schreef op maandag 16 mei 2005 @ 03:29:
code:
1
2
3
4
5
6
7
LPSTR   test1234 = new CHAR[100];

// ....
// code die test1234 gebruikt
// ....

delete[] test1234;


of gewoon op de stack:

code:
1
CHAR   test1234[100];


Het laatste is in dit geval wel zo makkelijk. Natuurlijk wel even kijken of die 100 ook groot genoeg is.
Dat laatste werkt idd wel. Alleen zo'n buffer kom ik nog niet echt uit, maakt ook weinig uit, daar ga ik later wel even mee prutsen. Voorlopig voldoet een char.
Bedankt voor de hulp! _/-\o_

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Voorlopig voldoet een char helemaal niet. Je hebt waarschijnlijk VC6, want in VC7 zou een buffer overflow check moeten zitten. Een char is vrijwel hetzelfde als een char[1]. Dat is niet genoeg. Nou ja, als je aan GetDlgItemText ook die grootte 1 meegeeft dan gaat er niets fout - technisch gesproken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1