Avatar billede Slettet bruger
04. april 2006 - 10:44 Der er 16 kommentarer og
2 løsninger

Return "værdi" som er en char

Hvordan skal det laves hvis jeg har en funktion som skal returnerer en char return_value[64]

Hvordan skal funktionen erklæres og hvordan returneres værdien?!
Avatar billede mollevp Nybegynder
04. april 2006 - 12:12 #1
char* returnCharArray()
{
    char* p = "hejsa";
    return p;
}
Avatar billede mxs Nybegynder
04. april 2006 - 13:53 #2
En pointer til det array hvor dit element ligger, som mollevp så smukt siger.
Avatar billede Slettet bruger
04. april 2006 - 14:17 #3
Kan den klares ved

char* returnCharArray()
{
    char p[64]
    p = "hejsa";
    return &p;
}
Avatar billede arne_v Ekspert
04. april 2006 - 15:13 #4
1)

p = "hejsa";

skal vaere

strcpy(p,"hejsa");

2)

man maa ikke returnere adressen paa en lokal variabel !
Avatar billede mxs Nybegynder
04. april 2006 - 15:17 #5
Din funktion returnere jo ikke en pointer :) Kan du ikke alokoere et dynamisk array, og lave en funktion der returnere et givent element? Det er som sådan rigtigt det arne_v siger, da din adresse bliver slettet når din funktion returnere.
Avatar billede mollevp Nybegynder
04. april 2006 - 18:38 #6
I The C++ Programming Language side 90 - står ellers:
"A string literal is statically allocated so that it is safe to return one from a function."

Troede det galdt her?
Avatar billede arne_v Ekspert
04. april 2006 - 18:49 #7
char* p = "hejsa";
    return p;

er OK

    char p[64]
    strcpy(p,"hejsa");
    return &p;

er ikke OK (fordi kopien af literal er paa stak)
Avatar billede mollevp Nybegynder
04. april 2006 - 19:03 #8
Ahh - sorry, jeg troede du referede til det kode jeg postede :)
Avatar billede Slettet bruger
05. april 2006 - 08:25 #9
Arne_v vil det sige at min funktion skal se således ud:

char returnCharArray()
{
    char* p[64]
    p = "hejsa";
    return p;
}

Så vil den kaldende funktion kunne få return værdien... fx

Return_value = returnCharArray();
Avatar billede segmose Nybegynder
05. april 2006 - 09:11 #10
mollevp:
>I The C++ Programming Language side 90 - står ellers:
>"A string literal is statically allocated so that it is safe to return one from a >function."
>
>Troede det galdt her?

Men du må ikke rette i den, dvs du må godt gøre sådan:

char *returnCharArray() {
    char p[64] = "hejsa";
    return p;
}

men ikke:
char *returnCharArray() {
    char *p = "hejsa                                "; // implicit er "hejsa" const. (ca. 64 char)
    sprintf(p, "%s", "hej med dig"); // ændre literallen, udefineret hvad den gør, kan være read only
    return p;
}
Avatar billede segmose Nybegynder
05. april 2006 - 09:14 #11
bævl, rettelse til ovenstående:
Men du må ikke rette i den, dvs du må godt gøre sådan:
char *returnCharArray() {
    char *p = "hejsa";
    return p;
}
Avatar billede arne_v Ekspert
05. april 2006 - 13:35 #12
nej

char *returnCharArray()
{
    char* p;
    p = "hejsa";
    return p;
}

og

Return_value = returnCharArray();

som mollevp også skrev
Avatar billede arne_v Ekspert
05. april 2006 - 13:36 #13
char* p[64]

er 64 strenge (pointere til char arrays)
Avatar billede Slettet bruger
31. maj 2006 - 08:07 #14
Gider i lave et svar, så får i nogle points.
Avatar billede arne_v Ekspert
19. juni 2006 - 01:51 #15
alle 4 ?
Avatar billede Slettet bruger
19. juni 2006 - 08:01 #16
Nej
Arne_v og mollevp...... min fejl sorry, det gik vidst lidt stærkt
Avatar billede mollevp Nybegynder
19. juni 2006 - 08:43 #17
svar
Avatar billede arne_v Ekspert
19. juni 2006 - 12:43 #18
svar
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