A következő kódom van, amelyben requestLine
mindig üres, és nem tudom kideríteni, miért. request
egy nyers HTTP-kérést tartalmaz, és szeretném megszerezni a kérés első sorát, amely tartalmazza a metódust és az URL-t.
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; }
Az első println
26-ot ad vissza, ahogy azt a "GET /ilyen_nincs HTTP/1.1"
(25 karakter hosszúságú) karaktersorozatnál elvárhatjuk, de aztán requestLine
mindig üres. Kíváncsi vagyok, miért?
Válasz
26 karakter hosszú, így a karakterlánc-indexek 0 és 25 között vannak. Mivel a substring(0, firstEOLAt);
mezőben a második argumentuma meghaladja a karakterlánc végindexét, akkor fut váratlan viselkedés a dokumentáció szerint , és üres karakterláncot kap.
Vigyázat: tegye győződjön meg róla, hogy indexértékei a String hosszúságán belül vannak, különben megkapja kiszámíthatatlan eredmények. Ezt a fajta hibát különösen nehéz megtalálni az subing () második példányával, ha a kezdő pozíció kisebb, mint a karakterlánc hossza, de a vége nem “t”.