Hi,
ich möchte die verfügbaren WiFi Netzwerke auslesen und in eine Liste speichern.
Das funktioniert soweit auch ganz gut, doch die String Ausgabe sieht bei längeren SSIDs eigenartig aus ...
Serial.printf("%s", WiFi.SSID(i).c_str()); // funktioniert
Serial.printf("%s", WiFi.SSID(i)); // funktioniert nur mit kurzen SSIDs
Wenn WiFi.SSID(i).c_str() überhaupt erlaubt ist, liefert WiFi.SSID(i) natürlich kein char*, sondern ein String Objekt. Das passt nicht zu printf("%s", .... );
Serial.print kann wahlweise const char* oder den Text eines String Objekts ausgeben
Serial.print(WiFi.SSID(i)); // geht
Serial.print(WiFi.SSID(i).c_str()); // geht auch
Wofür?
Auf einem Mikrocontroller am Besten nicht und wenn doch (auf eigene Gefahr) dann mit Prüfung des Return-Codes und wieder Aufräumen des Speichers. Evtl. suchst Du malloc(...);
Okay, es scheint nur die Ausgabe zu sein. Wenn ich da .c_str() nutze bekomme ich die richtigen Zeichen.
Hatte die vorhandenen WiFi Netze gescannt und in einem Vector of Strings gespeichert .
Diese habe ich dann in einer eigenen WiFiClient Website in einer Combobox dargestellt.
Das habe ich aber ohne .c_str() getan und da war die Anzeige dort und im Seriellen Monitor fehlerhaft. Ich dachte das das Speichern der Netzwerknamen schon fehlerhaft ist, aber es waren nur die Printf Ausgaben.