Avatar billede tufsy Nybegynder
21. juni 2004 - 14:01 Der er 11 kommentarer

fortolkning af kode

Hej.

Er der en hardcore programmør, der kan fortælle mig hvad nedenstående kode helt præcist gør.

Altså når den får et request, så går den ind og søger efter det i argument, hvis den ikke finder den returnerer den et NULL, derefter.........

Herfra er jeg lidt i tvivl???????



char *getvalue(char *request, char *argument)
{
char search[100];
sprintf(search, "%s=",argument);
char *pointer = strstr(request, search);

if(pointer == NULL)
{
printf("Argument not found");
return NULL;;
}
char *start = pointer + strlen(search);
char *end = strchr(start, '&');

if(end == NULL)
end = strchr(start, ' ');

if(end == NULL)
{
printf("Could not find value");
return NULL;;
}

char result[100];
strncpy(result, start, end-start);
result[1] = '\0';
return result;
}
Avatar billede arne_v Ekspert
21. juni 2004 - 14:09 #1
søg efter argument= i request
hvis den ikke er der returner NULL
find første & eller mellemrum efter argument=
hvis ikke der er et sådant så returner NULL
kopier det efter argument= og indtil & eller mellemrum til result
returner result
Avatar billede arne_v Ekspert
21. juni 2004 - 14:10 #2
Og så er kode ukorrekt.

Man må *ikke* returnere adressen på en lokal variabel og det gør
man med result.

result skal flyttes ud som global variabel eller med ind i argument listen.
Avatar billede arne_v Ekspert
21. juni 2004 - 14:10 #3
result[1] = '\0';

skulle uden tvivl have været:

result[end-start] = '\0';
Avatar billede arne_v Ekspert
21. juni 2004 - 14:11 #4
Og det undrer mig meget med testet på & eller mellemrum fordi nromalt
vil man betragte "f=v" som værende legalt.
Avatar billede tufsy Nybegynder
21. juni 2004 - 14:17 #5
ok men man søger efter argument i request, finder man den ikke returnerer man null, derefter søger man efter & og ' ', men

char *start = pointer + strlen(search);
char *end = strchr(start, '&');

if(end == NULL)
end = strchr(start, ' ');

if(end == NULL)
{
printf("Could not find value");
return NULL;;

som jeg forstår koden her, så søger man efter en værdi før man støder på  eller mellemrum, finer man det ikke og støder på et & eller mellemrum, så returnerer man et NULL, finder man det eftersøgte kopierer man det til funktionen result og sender det tilbage........er det forkert???
Avatar billede arne_v Ekspert
21. juni 2004 - 14:34 #6
Nej omvendt.

hvis man finder argument= {
  hvis man finder & eller mellemrum {
      returner tekst
  } ellers {
      returner NULL
  }
} ellers {
  return NULL
}
Avatar billede arne_v Ekspert
21. juni 2004 - 14:55 #7
OK ?
Avatar billede tufsy Nybegynder
21. juni 2004 - 15:26 #8
ok hvad gør så funktionerne???

char *start = pointer + strlen(search);
char *end = strchr(start, '&');


end = strchr(start, ' ');
Avatar billede arne_v Ekspert
21. juni 2004 - 15:36 #9
char *start = pointer + strlen(search);

lad start pege på pointer + længden af search

char *end = strchr(start, '&');

lad end pege på første &

end = strchr(start, ' ');

lad end pege på første mellemrum
Avatar billede tufsy Nybegynder
21. juni 2004 - 15:37 #10
tak nu har jeg den..det var lige det jeg søgte efter.
Avatar billede arne_v Ekspert
09. juli 2004 - 23:36 #11
Tid at få lukket spørgsmålet ?
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