Cum se folosește String.substring?

Am următorul cod în care requestLine este întotdeauna gol și nu pot să-mi dau seama de ce. request conține o solicitare HTTP brută și vreau să primesc prima linie a cererii care conține metoda și adresa URL.

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

Primul println returnează 26 așa cum v-ați aștepta pentru șirul "GET /ilyen_nincs HTTP/1.1" (lung de 25 de caractere), dar apoi requestLine este întotdeauna gol. Mă întreb de ce?

Răspuns

GET /ilyen_nincs HTTP/1.1\n are o lungime de 26 de caractere, astfel încât indicii șirului sunt de la 0 la 25. Deoarece, al doilea argument din substring(0, firstEOLAt); depășește indicele final al șirului, vă confruntați cu comportament neașteptat conform documentație și obținerea unui șir gol.

Atenție: faceți asigurați-vă că valorile indexului sunt în lungimea șirului sau veți obține rezultate imprevizibile. Acest tip de eroare poate fi deosebit de greu de găsit cu a doua instanță a șirului () dacă poziția inițială este mai mică decât lungimea șirului, dar poziția finală nu este „t.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *