a line of inbuilt example of wifimanager messing with whole code

Hello everybody
I was just jerking around with wifimanager's example called AutoconnectwithFSparameters just to understand it......when i run this inbuilt example on my nodeMCU it give the random gibberish error message
but after inspecting,i found after commenting these lines out ,the code works well....

strcpy(mqtt_server, json["mqtt_server"]);
          strcpy(mqtt_port, json["mqtt_port"]);
          strcpy(blynk_token, json["blynk_token"]);

could you please tell,whats happening,so that i would understand and use it as per my need
and ya....it happened just today....before when i used it last time it worked well.....
thanks already

#include <FS.h>                   //this needs to be first, or it all crashes and burns...

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino

//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager

#include <ArduinoJson.h>          //https://github.com/bblanchon/ArduinoJson

//define your default values here, if there are different values in config.json, they are overwritten.
char mqtt_server[40];
char mqtt_port[6] = "8080";
char blynk_token[34] = "YOUR_BLYNK_TOKEN";

//flag for saving data
bool shouldSaveConfig = false;

//callback notifying us of the need to save config
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
}


void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println();

  //clean FS, for testing
  //SPIFFS.format();

  //read configuration from FS json
  Serial.println("mounting FS...");

  if (SPIFFS.begin()) {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("reading config file");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile) {
        Serial.println("opened config file");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed json");

          strcpy(mqtt_server, json["mqtt_server"]);
          strcpy(mqtt_port, json["mqtt_port"]);
          strcpy(blynk_token, json["blynk_token"]);

        } else {
          Serial.println("failed to load json config");
        }
        configFile.close();
      }
    }
  } else {
    Serial.println("failed to mount FS");
  }
  //end read



  // The extra parameters to be configured (can be either global or just in the setup)
  // After connecting, parameter.getValue() will get you the configured value
  // id/name placeholder/prompt default length
  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);
  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 6);
  WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 32);

  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback);

  //set static ip
  wifiManager.setSTAStaticIPConfig(IPAddress(10,0,1,99), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
  
  //add all your parameters here
  wifiManager.addParameter(&custom_mqtt_server);
  wifiManager.addParameter(&custom_mqtt_port);
  wifiManager.addParameter(&custom_blynk_token);

  //reset settings - for testing
  //wifiManager.resetSettings();

  //set minimu quality of signal so it ignores AP's under that quality
  //defaults to 8%
  //wifiManager.setMinimumSignalQuality();
  
  //sets timeout until configuration portal gets turned off
  //useful to make it all retry or go to sleep
  //in seconds
  //wifiManager.setTimeout(120);

  //fetches ssid and pass and tries to connect
  //if it does not connect it starts an access point with the specified name
  //here  "AutoConnectAP"
  //and goes into a blocking loop awaiting configuration
  if (!wifiManager.autoConnect("AutoConnectAP", "password")) {
    Serial.println("failed to connect and hit timeout");
    delay(3000);
    //reset and try again, or maybe put it to deep sleep
    ESP.reset();
    delay(5000);
  }

  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");

  //read updated parameters
  strcpy(mqtt_server, custom_mqtt_server.getValue());
  strcpy(mqtt_port, custom_mqtt_port.getValue());
  strcpy(blynk_token, custom_blynk_token.getValue());

  //save the custom parameters to FS
  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["mqtt_server"] = mqtt_server;
    json["mqtt_port"] = mqtt_port;
    json["blynk_token"] = blynk_token;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile) {
      Serial.println("failed to open config file for writing");
    }

    json.printTo(Serial);
    json.printTo(configFile);
    configFile.close();
    //end save
  }

  Serial.println("local ip");
  Serial.println(WiFi.localIP());

}

void loop() {
  // put your main code here, to run repeatedly:


}

What do you mean by "it give the random gibberish error message"? Where are you seeing this error message?

Does mqtt_server value from the config.json fit in 39 characters? If not, you're writing off the end of an array, which will cause undefined behavior, generally crashes or resets.

Does everything else fit into the arrays you're copying them to?

I suspect the "gibberish error" is the reboot notice that the esp8266 prints at 74880 baud when it reboots.

thanks for your reply

What do you mean by "it give the random gibberish error message"? Where are you seeing this error message?

serial monitor

Does everything else fit into the arrays you're copying them to?

i havent even copied anything into it....i was just running the code to put something into the array....but before that it looks like its crashing

I suspect the "gibberish error" is the reboot notice that the esp8266 prints at 74880 baud when it reboots.

no,for i did cross check baud rate...it was right

I suspect the "gibberish error" is the reboot notice that the esp8266 prints at 74880 baud when it reboots.

no,for i did cross check baud rate...it was right

What he meant is that the ESP after reboot sends a msg at the BAUD rate before it swithes to the one you define in setup()

What he meant is that the ESP after reboot sends a msg at the BAUD rate before it swithes to the one you define in setup()

thanks deva_Rishi for ya reply
but is that message supposed to continue for as long as ever.......it just continues
here it is
ctx: cont sp: 3ffffd90 end: 3fffffd0 offset: 01b0 >>>stack>>> 3fffff40: 00000001 00000028 3ffeec70 40203f7c 3fffff50: 40104d40 0061f357 3ffeed84 00000000 3fffff60: 3ffee4a0 3ffeed84 3ffe8504 3ffeed84 3fffff70: 00000000 3ffeed30 40204614 3fffefb0 3fffff80: 40201602 00001388 00001388 402015f7 3fffff90: 00000001 3ffeeb10 3ffeec70 402026ba 3fffffa0: 3fffdad0 00000000 3ffeed28 40202710 3fffffb0: 3fffdad0 00000000 3ffeed28 402046a0 3fffffc0: feefeffe feefeffe 3ffe8504 40100739 <<<stack<<

Ah no... That looks like a memory corruption message.
That is not "gibberish error" it clearly specifies where the error occurred with all the address.,
What ArduinoJson library version do you have installed ? It all seems to run just fine for me.

ooo....is that so,i had inbuilt in my ide....i will just install new one and see how it goes
thanks bro

oh mine wasn't build in, i was just wondering if maybe you had installed the 'beta'
but otherwise most likely reason would be that the size of these

char mqtt_server[40];
char mqtt_port[6] = "8080";
char blynk_token[34] = "YOUR_BLYNK_TOKEN";

strings is just to small to contain the data that you write to it.

no,i havent installed beta
the thing is how am i supposed to write data into these parameters if i the code isn't running so that you would write any string into them
also,noting,this code just works fine sometimes.....just out of the blue

Look i have no idea ! I mentioned before that there is something in the code that anyway doesn't make sense (the delay() after the ESP.reset() will of course never be executed.) i am not even sure what the sketch is supposed to do. One more thing, what do you have set as your flash size for your board ?

4 MB
since it is nodeMCU board

no SPIFFS ?

I am sorry.....but how do i find that....never dealt with it before

you can select it from tools>flash size
there is a short introduction to them here I don't know if it has anyrthing to do with the erratic behavior of your sketch, but i do suspect it does. another explanation related to FS.h here
It's actually pretty cool stuff, there was another thread where someone was asking for this kind of solution and all anyone came up with was the PROGMEM thing. Wonder if i can still find it.