Wie benutzt man String.substring?

Ich habe den folgenden Code, in dem requestLine immer leer ist und ich nicht herausfinden kann, warum. request enthält eine unformatierte HTTP-Anforderung, und ich möchte die erste Zeile der Anforderung abrufen, die die Methode und die URL enthält.

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

Das erste println gibt 26 zurück, wie Sie es für die Zeichenfolge "GET /ilyen_nincs HTTP/1.1" (25 Zeichen lang) erwarten würden, aber dann requestLine ist immer leer. Ich frage mich warum?

Antwort

GET /ilyen_nincs HTTP/1.1\n ist 26 Zeichen lang, sodass die Zeichenfolgenindizes zwischen 0 und 25 liegen. Da Ihr zweites Argument in substring(0, firstEOLAt); den Endindex der Zeichenfolge überschreitet, auf die Sie stoßen unerwartetes Verhalten gemäß der Dokumentation und Abrufen einer leeren Zeichenfolge.

Achtung: make Stellen Sie sicher, dass Ihre Indexwerte innerhalb der Länge des Strings liegen, sonst erhalten Sie unvorhersehbare Ergebnisse. Diese Art von Fehler kann bei der zweiten Instanz von substring () besonders schwer zu finden sein, wenn die Startposition kleiner als die Länge des Strings ist, die Endposition jedoch nicht „t“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.