Mám následující kód, ve kterém je requestLine
vždy prázdný a nemohu přijít na to, proč. request
obsahuje surový požadavek HTTP a chci získat první řádek požadavku, který obsahuje metodu a adresu 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; }
První println
vrátí 26 tak, jak byste očekávali pro řetězec "GET /ilyen_nincs HTTP/1.1"
(25 znaků dlouhý), ale pak requestLine
je vždy prázdný. Zajímalo by mě, proč?
Odpovědět
GET /ilyen_nincs HTTP/1.1\n
má 26 znaků, takže řetězcové indexy jsou od 0 do 25. Protože váš druhý argument v substring(0, firstEOLAt);
přesahuje koncový index řetězce, narazíte na neočekávané chování podle dokumentace a získání prázdného řetězce.
Upozornění: provést ujistěte se, že vaše indexové hodnoty jsou v délce řetězce, nebo se dostanete nepředvídatelné výsledky. Tento druh chyby může být obzvláště těžké najít u druhé instance substring (), pokud je počáteční pozice menší než délka řetězce, ale koncová pozice není t.