Come usare String.substring?

Ho il seguente codice in cui requestLine è sempre vuoto e non riesco a “capire perché. request contiene una richiesta HTTP non elaborata e desidero ottenere la prima riga della richiesta che contiene il metodo e lURL.

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; } 

Il primo println restituisce 26 come ci si aspetterebbe per la stringa "GET /ilyen_nincs HTTP/1.1" (25 caratteri), ma poi requestLine è sempre vuoto. Mi chiedo perché?

Risposta

GET /ilyen_nincs HTTP/1.1\n è lungo 26 caratteri, quindi gli indici di stringa vanno da 0 a 25. Poiché il tuo secondo argomento in substring(0, firstEOLAt); supera lindice di fine della stringa, ti stai imbattendo comportamento imprevisto come da documentazione e ottenere una stringa vuota.

Attenzione: fai assicurati che i tuoi valori di indice siano allinterno della lunghezza della stringa o otterrai risultati imprevedibili. Questo tipo di errore può essere particolarmente difficile da trovare con la seconda istanza di substring () se la posizione iniziale è minore della lunghezza di String, ma la posizione finale non è “t.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *