Jeg har følgende kode, hvor requestLine
altid er tom, og jeg kan ikke finde ud af hvorfor. request
indeholder en rå HTTP-anmodning, og jeg ønsker at få den første linje i anmodningen, der indeholder metoden og URLen.
boolean parseRequest(String* request) { int firstEOLAt = request->indexOf("\n"); if (firstEOLAt < 0) return false; Serial.println(firstEOLAt); String requestLine = request->substring(0, firstEOLAt); Serial.println(requestLine); // ...rest of the parsing will go here... return true; }
Den første println
returnerer 26 som du ville forvente for strengen "GET /ilyen_nincs HTTP/1.1"
(25 tegn lang), men derefter requestLine
er altid tom. Jeg undrer mig over, hvorfor?
Svar
GET /ilyen_nincs HTTP/1.1\n
er 26 tegn lang, så strengindekser er fra 0 til 25. Da dit andet argument i substring(0, firstEOLAt);
overstiger slutindekset for strengen, løber du ind uventet opførsel i henhold til dokumentation og at få en tom streng.
Forsigtig: lav Sørg for, at dine indeksværdier er inden for strengens længde, ellers får du det uforudsigelige resultater. Denne form for fejl kan være særlig vanskelig at finde med den anden forekomst af substring (), hvis startpositionen er mindre end strengens længde, men slutpositionen ikke er t.