Jag har följande kod där requestLine
alltid är tom och jag kan inte ta reda på varför. request
innehåller en rå HTTP-begäran, och jag vill få den första raden i begäran som innehåller metoden och webbadressen.
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örsta println
returnerar 26 som du förväntar dig för strängen "GET /ilyen_nincs HTTP/1.1"
(25 tecken lång), men sedan requestLine
är alltid tom. Jag undrar varför?
Svar
GET /ilyen_nincs HTTP/1.1\n
är 26 tecken lång så strängindex är från 0 till 25. Eftersom ditt andra argument i substring(0, firstEOLAt);
överstiger slutindexet för strängen, stöter du på oväntat beteende enligt dokumentation och att få en tom sträng.
Varning: gör se till att dina indexvärden ligger inom strängens längd eller så får du det oförutsägbara resultat. Denna typ av fel kan vara särskilt svårt att hitta med den andra instansen av substring () om startpositionen är mindre än strängens längd, men slutpositionen inte är t.