Hogyan kell használni a String.substring fájlt?

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük