文字列一致判定でset,resetを判別したい
AWS IoTのサーバを介して通信を行わせているのですが、”set”の文字列が”reset”という文字列の”set”部分で一致してtrueを出してしまうのですが、別の文字だと判別するためにはどの様にしたら良いでしょうか?
(現在のコード)
void mqttCallback (char* topic, byte* payload, unsigned int length) {
Serial.print("Received. topic=");
Serial.println(topic);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.print("\n");
char s2[] = "sec";
char s3[] = "set";
char s4[] = "reset";
char *ret;
char *ret2;
if ((ret = strstr((char *)payload, s2)) != NULL && (ret2 = strstr((char *)payload, s3)) != NULL ) {
snprintf (msg, 75, "%sは%d番目にありました.\n", s2, ret - (char *)payload);
Serial.println(msg);
snprintf (msg, 75, "%sは%d番目にありました.\n", s3, ret2 - (char *)payload);
Serial.println(msg);
Serial.print("sec set \n");
digitalWrite(26, HIGH);
Serial.println(msg);
} else if ((ret = strstr((char *)payload, s2)) != NULL && (ret2 = strstr((char *)payload, s4)) != NULL ) {
snprintf (msg, 75, "%sは%d番目にありました.\n", s2, ret - (char *)payload);
Serial.println(msg);
snprintf (msg, 75, "%sは%d番目にありました.\n", s3, ret2 - (char *)payload);
Serial.println(msg);
Serial.print("sec reset \n");
digitalWrite(26, LOW);
Serial.println(msg);
} else {
snprintf (msg, 75, "%sはありませんでした.\n", s2);
Serial.println(msg);
}
}
”msg”の文字列には
sec set
sec reset
この2パターンのどちらかが来ます。
ただ、(ret2 = strstr((char *)payload, s4)) != NULL で”reset"を検出したいのですが、
re"set"部分を(ret2 = strstr((char *)payload, s3)) != NULL が検出してしまう様で、どちらもtrueのとして検出してしまいます。
どうぞ、ご教示の程よろしくお願い致します。
お礼
ありがとうございます。もっと勉強します。