Hvordan bruges String.substring?

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *