Avatar billede soreno Praktikant
01. november 2001 - 16:46 Der er 5 kommentarer og
2 løsninger

return

Jeg har følgende metode:

char buffer[32];
void readRegistry(LPCTSTR key)
{
..
}

den kunne jeg godt tænke mig så sådan ud:
char[] readRegistry(LPCTSTR key)
{
  char buffer[32];
  ..
  return buffer;
}

men det virker ikke. Hvordan gør jeg det? kan det overhovedet lade sig gøre?

Mvh
Søren Olesen
Avatar billede jpk Nybegynder
01. november 2001 - 16:57 #1
1) lad i stedet funktionen returnere en char*
2) Allokér noget hukommelse til strngen i din funktion
3) kopier værdien dertil
4) Når du har aflæst værdien, der hvor du kalder funktionen fra, frigiv mem...
Avatar billede soreno Praktikant
01. november 2001 - 17:16 #2
kunne du ikke give et eksempel?
Avatar billede jpk Nybegynder
01. november 2001 - 17:17 #3
hvilket udviklingsmiljø/compiler bruger du?
Avatar billede soreno Praktikant
01. november 2001 - 17:29 #4
visual c++ 6
Avatar billede ttn.bonk Nybegynder
01. november 2001 - 17:59 #5
jpk\'s løsning er ofte set anvendt, men generelt er jeg ikke meget for funktioner, der allokerer memory, som en bruger af funktionen senere selv skal de-allokere (men nogen gange er det nødvendigt).
En anden metode er

void readRegistry(LPCTSTR key, char* buffer)
{
..
// skriv hvad der skal skrives i buffer
strcpy(buffer,\"Killroy was here\");
..
}

og anvendelsen senere er som nedenfor:

char myBuffer[32];
readRegistry(\"myKey\", myBuffer);

Ulempen her er så istedet at hvad skal
readRegistry gøre hvis den har brug for en 100 bytes buffer, mens brugeren kun allokerer 32 bytes? Det kan dog løses på mange måder.

Eksempel med jpk\'s metode:

char* readRegistry(LPCTSTR key)
{
char* buffer = new char[32];
strcpy(buffer,\"Killroy was here\");
return buffer;
}

char myBuffer[32];
char* p= readRegistry(\"myKey\");
strcpy(myBuffer,p);
delete p;

Avatar billede soreno Praktikant
01. november 2001 - 18:07 #6
det jeg egentlig ønskede var indkapsling af metoden, og det har jeg delvist opnået med ttn.bonk\'s metode.
ideen med objektorientering er væk ved at bruge jpk\'s metode, men den virker sikkert fint.

Tak for hjælpen, mvh
Søren Olesen
Avatar billede jpk Nybegynder
01. november 2001 - 19:56 #7
Jeg ville absolut ikke selv implementere metoden på den måde, det var blot den løsning der lå tættest på den du selv foreslog...

Grunden til, at jeg spurgte efter udviklingsmiljø, var netop også at kunne give en bedre løsning!
Med VC++ kan du, hvis du anvender MFC, jo gøre det helt anderledes og simplere.
Jeg ville da heller ikke anvende en char* eller et char array, men en strengtype som MFC\'s CString eller STL\'s string.
(jo, jeg ved godt disse klasser blot er wrappere omkring char*)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester