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.