Странный опыт работы со строкой concat

У меня действительно плохой день с concat. Я не совсем уверен, где я сделал неправильно .. Посмотрите на мою функцию ниже.

void sim900aSendHttp(String bid, String lati, String longi) {
  Serial.println("BUSID:"+bid+",LAT:"+lati+"LONG:"+longi);
  String httpget = "http://uumresearch.com/bustracking/update_location.php?busid="+bid+"&latitude="+lati+"&longitude="+longi+"";
  //String httpget = "http://uumresearch.com/bustracking/update_location.php?busid=KDF8860&latitude=6.533415&longitude=106.33345";
  Serial.println(httpget);
  serialSIM800.println("AT+HTTPPARA=\"URL\",\"" + httpget + "\"");
  delay(3000);
  serialSIM800.println("AT+HTTPACTION=0");
  delay(8000);
}

Проблема связана с:

String httpget = "http://uumresearch.com/bustracking/update_location.php?busid="+bid+"&latitude="+lati+"&longitude="+longi+"";

где отображается только серийный монитор

http://uumresearch.com/bustracking/update_location.php?busid=KDF8860

отсутствуют переменные "lat" и "longi" в строке concat.

Подтверждено, что обе переменные доступны функции, напечатанной

Serial.println("BUSID:"+bid+",LAT:"+lati+"LONG:"+longi);

, 👍0

Обсуждение

Какую плату ардуино вы используете?, @Jot


1 ответ


1

+ на const char * увеличивает указатель. только String имеет +, перегруженный как конкатенация правого операнда (не левого). поэтому "abc" + str + "efg" не будет работать, даже если str является строкой. Что будет работать, так это String("abc") + str + "efg", но small Строки будут очень быстро фрагментировать динамическую память MCU, и скетч выйдет из строя.

Распечатайте детали непосредственно на serialSIM800 или используйте snprintf для построения строк или попробуйте CStringBuilder из моей библиотеки StreamLib

,