Jeg har følgende kode der requestLine
alltid er tom, og jeg kan ikke finne ut hvorfor. request
inneholder en rå HTTP-forespørsel, og jeg vil få den første linjen i forespørselen som inneholder metoden og URL-en.
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 forventer for strengen "GET /ilyen_nincs HTTP/1.1"
(25 tegn lang), men deretter requestLine
er alltid tom. Jeg lurer på hvorfor?
Svar
GET /ilyen_nincs HTTP/1.1\n
er 26 tegn lang, slik at strengindekser er fra 0 til 25. Siden det andre argumentet ditt i substring(0, firstEOLAt);
overstiger sluttindeksen til strengen, støter du på uventet oppførsel i henhold til dokumentasjonen og får en tom streng.
Forsiktig: gjør at indeksverdiene dine er innenfor strengens lengde, eller du får det uforutsigbare resultater. Denne typen feil kan være spesielt vanskelig å finne med den andre forekomsten av substring () hvis startposisjonen er mindre enn strengens lengde, men sluttposisjonen ikke er t.