Hvordan bruker jeg String.substring?

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *