Hoe String.substring te gebruiken?

Ik heb de volgende code waarin requestLine altijd leeg is en ik kan “niet achterhalen waarom. request bevat een onbewerkt HTTP-verzoek en ik wil de eerste regel van het verzoek ophalen die de methode en de URL bevat.

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; } 

De eerste println retourneert 26 zoals je zou verwachten voor de string "GET /ilyen_nincs HTTP/1.1" (25 tekens lang), maar dan requestLine is altijd leeg. Ik vraag me af waarom?

Antwoord

GET /ilyen_nincs HTTP/1.1\n is 26 tekens lang, dus stringindices zijn van 0 tot 25. Aangezien je tweede argument in substring(0, firstEOLAt); de eindindex van de string overschrijdt, kom je onverwacht gedrag volgens de documentatie en het krijgen van een lege string.

Let op: zorg ervoor dat Zorg ervoor dat uw indexwaarden binnen de lengte van de String vallen, anders krijgt u onvoorspelbare resultaten. Dit soort fouten kan bijzonder moeilijk te vinden zijn met de tweede instantie van substring () als de startpositie kleiner is dan de lengte van de String, maar de eindpositie niet is.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *