Kuinka käyttää String.substringia?

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”.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *