Comment utiliser String.substring?

Jai le code suivant dans lequel requestLine est toujours vide et je ne peux pas comprendre pourquoi. request contient une requête HTTP brute, et je souhaite obtenir la première ligne de la requête qui contient la méthode et 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; } 

Le premier println renvoie 26 comme vous vous en doutez pour la chaîne "GET /ilyen_nincs HTTP/1.1" (25 caractères de long), puis requestLine est toujours vide. Je me demande pourquoi?

Réponse

GET /ilyen_nincs HTTP/1.1\n comporte 26 caractères, donc les indices de chaîne vont de 0 à 25. Puisque votre deuxième argument dans substring(0, firstEOLAt); dépasse lindex de fin de la chaîne, vous vous heurtez à comportement inattendu selon la documentation et obtention dune chaîne vide.

Attention: make assurez-vous que vos valeurs dindex sont dans la longueur de la chaîne ou vous obtiendrez des résultats imprévisibles. Ce type derreur peut être particulièrement difficile à trouver avec la deuxième instance de substring () si la position de départ est inférieure à la longueur de la chaîne, mais que la position de fin nest pas « t.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *