Minulla on seuraava koodi, jossa requestLine
on aina tyhjä, enkä tiedä miksi. request
sisältää raakan HTTP-pyynnön, ja haluan saada pyynnön ensimmäisen rivin, joka sisältää menetelmän ja URL-osoitteen.
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; }
Ensimmäinen println
palauttaa 26, kuten odotat merkkijonolle "GET /ilyen_nincs HTTP/1.1"
(25 merkkiä pitkä), mutta sitten requestLine
on aina tyhjä. Mietin miksi?
Vastaa
GET /ilyen_nincs HTTP/1.1\n
on 26 merkkiä pitkä, joten merkkijonoindeksit ovat välillä 0-25. Koska rgumentin substring(0, firstEOLAt);
toinen argumenttisi ylittää merkkijonon loppuindeksin, olet törmäämässä odottamaton toiminta -dokumentaation mukaisesti ja tyhjän merkkijonon saaminen.
Varoitus: tee varmista, että indeksisi arvot ovat merkkijonon sisällä, tai saat arvaamattomat tulokset. Tällaista virhettä voi olla erityisen vaikea löytää toisen merkkijonon () kanssa, jos aloitusasento on pienempi kuin merkkijonon pituus, mutta loppuasento ei ole ”t”.