valeur de indexOf d'une sous-chaine

Bonjour ,
Je débute en Arduino et je cale sur l'utilisation de indexOf avec une sous chaine.
Ma question va être simple :
dans l'exemple suivant où je veux récupérer l'index de "?id" dans la chaine buf
la solution est-elle 4 ou 6 ?
ou l'index du premier caractère de la sous-chaine ou du dernier ?
Dans tous les autres langages ce serait 4 mais ici c'est 6 !!??

Quelqu'un peut-il m'expliquer pourquoi j'ai la réponse 6 ?
(J'ai fait l'essai avec la version 1.6.7 et 1.0.6
sur une carte UNO et MEGA
Merci

Devine... :smiling_imp:

Programme :

String buf="0123?id7890";
void setup() {
Serial.begin(115200); // Initialise connexion Série
}
void loop() {
Serial.println(buf);
Serial.println("Position de ?id = "+String(buf.indexOf('?id')));
Serial.println("Position de ?id = "+String(buf.indexOf("?id")));
while(true);
}

Résultat :

0123?id7890
Position de ?id = 6
Position de ?id = 4

Le genre de "bug" qui fait rager....

Vous êtes bien gentils tous les deux mais je n'ai pas de solutions!!
si ... je teste le "?" puis "i" puis "d"
si c'est un bug je ne comprends pas qu'il ne soit pas encore corrigé
enfin...

tahitibob35:
Le genre de "bug" qui fait rager....

fallait l'oser celle là :slight_smile:

Vous êtes bien gentils tous les deux mais je n'ai pas de solutions!!
si ... je teste le "?" puis "i" puis "d"
si c'est un bug je ne comprends pas qu'il ne soit pas encore corrigé
enfin...

as tu compris la nuance entre "" et ' ' :wink:

Alors là tu m'apprends quelque chose que j'ignore. Depuis des lustres je fais du php, javascript, delphi ... et suivant les cas j'utilise les " " ou ' ' .
Dans ce cas précis je ne vois pas. Je vais chercher .
Merci pour la piste.

Si quelqu'un a trouvé une explication ... :slight_smile: qui se manifeste !

Quand on écrit String(buf.indexOf('?id'), indexOf attend un caractère. Il y a troncature de l'argument à 8 bits donc '?id' donne 'd' et on trouve la position de 'd' soit 6

Merci pour l'info !!
Bizarre que ce ne soit pas indiqué dans la doc, et que la compil soit validée .
D'accord il y a bien un ptit ^ (sous la fermeture de parenthèse de indexOf) dans les infos de compil , comme ci-dessous

Serial.println ("Index de '?id' ="+String(buf.indexOf('?id')));
** ^**

mais faut le voir !!!