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.