Jak používat String.substring?

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *