C++ Esp8266&;Nodemcu:返回请求字符串的方法

C++ Esp8266&;Nodemcu:返回请求字符串的方法,c++,string,esp8266,nodemcu,C++,String,Esp8266,Nodemcu,看在上帝的份上,我无法建立一个简单的方法,迭代每个扫描的网络,并将BSSID及其强度连接成一个字符串。我感觉像超级垃圾桶 我需要这个图案: http://IP:PORT/localize?mac1=x.x.x.x&strength1=-30&mac2=x.x.x.x&strength2=-40... 到目前为止,我得到的是: const char* build_request(){ int n = WiFi.scanNetworks(); char urlou

看在上帝的份上,我无法建立一个简单的方法,迭代每个扫描的网络,并将BSSID及其强度连接成一个字符串。我感觉像超级垃圾桶

我需要这个图案:

http://IP:PORT/localize?mac1=x.x.x.x&strength1=-30&mac2=x.x.x.x&strength2=-40...
到目前为止,我得到的是:

const char* build_request(){
  int n = WiFi.scanNetworks();

  char urlout[512];
  strcpy(urlout, host);

  for (int i = 0; i < n; ++i){
    char buffer[8];
    strcat(urlout, "&mac");
    sprintf(buffer, "%d", i);
    strcat(urlout, buffer);
    strcat(urlout, "=");
    strcat(urlout, WiFi.BSSIDstr(i).c_str());
    strcat(urlout, "&strength");
    strcat(urlout, buffer);
    strcat(urlout, "=");
    //strcat(urlout, WiFi.RSSI(i)); 
  }

  return urlout;

说:

例如,
Serial.print()
也需要const char*可以打印RSSI值

有人能告诉我正确的方向吗?正确地用vars构建字符串,避免缓冲区溢出等等

类变量

urlout
是一个局部变量,因此当它超出范围时(当您的函数返回时),它的生命周期结束,留下一个无效指针

我建议您将数组作为参数传递给函数:

const char* build_request(char *urlout){ ... }
P>可选的,如果您的目标和编译器支持它,则使用C++ <代码> STD::String 。<> >代码> URLOUT 是一个局部变量,因此它的生命周期在超出范围时结束(当函数返回时),留下一个无效指针。

我建议您将数组作为参数传递给函数:

const char* build_request(char *urlout){ ... }
可选,如果您的目标和编译器支持它,则使用C++ <代码> STD::String < /Cord>。
argument of type "int32_t" is incompatible with parameter of type "const char *"
const char* build_request(char *urlout){ ... }