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.