Bonjour,
Je cherche comment trouver une chaine dans une chaine ?
En retour de mon serveur web je reçoit la chaine suivante : HPD,0,379:GET /BManu HTTP/1.1
J'aimerais ne récupérer que le /BManu mais je ne trouve pas de fonction me permettant de réaliser cette opération pour l’intégrer dans un While
Merci d'avance pour vos pistes
Salut
Différentes solutions possibles.
parcourir la chaîne jusqu'à trouver '/'.
copier les caractères jusqu'à ' '.
placer un '\0' à la place de l'espace.
strtok() peut être bien aussi.
inspire-toi de CECI .
L'intérêt de strtok() est que tu n'as pas besoin de déclarer un buffer pour la sous-chaîne que tu extrais.
Elle retourne un simple pointeur.
Mais ATTENTION: strtok() modifie la chaîne.
@+
J-M-L
August 31, 2018, 10:04am
4
essayez un truc du genre
char headerLine[] = " HPD,0,379:GET /BManu HTTP/1.1";
const char reqGET[] = ":GET ";
const byte reqOffset = sizeof(reqGET) - 1; // on ne veut le +1 du '\0' pour pointer au bon endroit
const size_t maxURLLength = 20;
char URLBuffer[maxURLLength + 1]; // +1 pour le '\0' à la fin de la chaîne
boolean parseURL(const char * message, char * urlBuffer, size_t maxURLCar)
{
boolean correct = false;
char * ptrURL = strstr(message, reqGET) ; // http://www.cplusplus.com/reference/cstring/strstr/
if (ptrURL) {
char * debutUrl = ptrURL + reqOffset;
char * endUrlPtr = strstr(debutUrl, " "); // on cherche l'espace à la fin de l'URL
if (endUrlPtr) {
byte nbCar = endUrlPtr - debutUrl;
if (nbCar < maxURLCar) {
strncpy(urlBuffer, debutUrl, nbCar);
urlBuffer[maxURLCar] = '\0'; // au cas où strncpy n'a pas mis de terminaison
correct = true;
} else Serial.println(F("Erreur, URL trop longue"));
} else Serial.println(F("Erreur, Header non correct"));
} else Serial.println(F("Erreur, ce n'est pas une requete GET"));
return correct;
}
void setup() {
Serial.begin(115200);
if (parseURL(headerLine, URLBuffer, maxURLLength)) {
Serial.print(F("J'ai trouve un l'URL: ["));
Serial.print( URLBuffer);
Serial.print(F("]"));
}
}
void loop(){}
(non testé)