Hur använder jag String.substring?

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *