Avatar billede hyperguy Nybegynder
17. maj 2004 - 13:35 Der er 7 kommentarer og
1 løsning

Function retunere forkert

Jeg har lavet en function så jeg kan læse en bestemt del af en conf fil jeg har lavet. Mit problemer er at den returner noget forkert

char readConf(char option[200])
{
    FILE *fp;
    char line[100];
    char *pValue, *pKey, *pValue2;
    fp = fopen("config.conf", "r");
    while(!feof(fp))
    {
        fgets(line,sizeof(line),fp);
        if(strstr(line,option))
        {
            pKey = strtok(line,"=");
            pValue = strtok(NULL,"=");
            break;
        }
    }
    fclose(fp);
    strncpy(pValue2,pValue,strlen(pValue)-2);
    return *pValue2;
}
Hvis jeg laver en cout << pValue2 << endl; lige før min return kode, så skriver den fint det som den skal returnere.

Men laver jeg en:
conf = readConf("section");
får jeg en "@^" tilbage i hovedet.
Avatar billede hyperguy Nybegynder
17. maj 2004 - 13:38 #1
ok har lige fundet ud af det virker faktisk slet ikke. hehe
Avatar billede arne_v Ekspert
17. maj 2004 - 13:45 #2
Prøv:

static char pValue2[200]; // erklær pValue2 her

char *readConf(char option[200]) // <--- returner char* ikke char
{
    FILE *fp;
    char line[100];
    char *pValue, *pKey;
    fp = fopen("config.conf", "r");
    while(!feof(fp))
    {
        fgets(line,sizeof(line),fp);
        if(strstr(line,option))
        {
            pKey = strtok(line,"=");
            pValue = strtok(NULL,"=");
            break;
        }
    }
    fclose(fp);
    strncpy(pValue2,pValue,strlen(pValue)-2);
    return pValue2; // uden *
}
Avatar billede hyperguy Nybegynder
17. maj 2004 - 13:48 #3
Så returner den "0xbffffc14"
Avatar billede segmose Nybegynder
19. maj 2004 - 10:13 #4
hvis du der hvor den returnerer laver en

cout << readConf(dinparameter) << endl;

får du så ikke det rigtige???

arne mangler vist også efter fclose:

if ((!pValue) || (!pKey)) // hov vi fandt ikke noget
  return NULL;
Avatar billede noden Nybegynder
20. maj 2004 - 18:52 #5
Du skal nok være opmærksom på at du returnerer en pointer til en lokal variabel.
Lige så snart du forlader funktionen bliver pValue2 slettet og du læser i den blå luft!
Dår du ikke en warning på det?
Jeg vil nok lave value result eller lave noget globalt!
Måske er problemet at den forsøger at vise adressen på pointeren som tegn!
Avatar billede arne_v Ekspert
16. juni 2004 - 23:16 #6
Kommet videre ?
Avatar billede hyperguy Nybegynder
17. juni 2004 - 07:56 #7
Nej ikke rigtig. Jeg har lagt det lidt på hylden fordi der kom noget der skulle laves som var vigtigere. Men lader lige den her tråd være åben sådan jeg kan skrive til den igen.
Avatar billede hyperguy Nybegynder
20. oktober 2005 - 08:11 #8
Lukket
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