cString fehlt das erste ellement Fehlt

Hallo

ich wollte einen string in einen cString mit toCharArray() umwandeln. Nur vergisst er dabei immer das erste element.

  String spw = "qwertzuiop";
  int len = spw.length();

  Serial.println("Attempting to connect to WPA network...");  
 
  char pw[sdmen.get_pw().length()];
  sdmen.get_pw().toCharArray(pw,sdmen.get_pw().length()+1);

 Serial.println(pw);//gibt nichts aus

  for(int i =0;i<sizeof(pw);++i){
    Serial.println(pw[i]);
  }

/*  Ausgabe der schleife
w
e
r
t
z
u
i
o
p
*/

Serial.println(pw);//gibt nichts aus

Warum ist pw[0] = 0 ?
Was macht sdmen.get_pw() ?
bzw. warum benutzt du nicht String sdw="qwertzuiop";

Weil es keinen unterschied Macht

Wenn du meinst String.toCharArray
würde pw[0] auf 0 setzen, wenn es auf den sdw aus deinem Code angewendet wird,
bin ich anderer Meinung.

String braucht man zwar nicht, aber sooo schlecht ist es dann doch nicht.

Was macht sdmen.get_pw() ?

Gibt einen string aus.

warum benutzt du nicht String sdw="qwertzuiop"

Ichbrauche den c string für

WiFi.begin(ssid,pw);

Satzende:
Ich brauche den c string für

WiFi.begin(ssid,pw);

... und wofür brauchst du String Objekte ?

char pw[] = "qwertzuiop";  // fertig

meine Frage war: warum benutzt du nicht **sdw.**toCharArray(pw, sizeof(pw) );

Und deine Zeile

  char pw[sdmen.get_pw().length()];

sieht auch sehr verdächtig aus.
So kannst keinen dynamischen Speicher belegen in c / c++
Andere c++ Compiler meckern z.B.

error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'pw' : unknown size

und wofür brauchst du String Objekte ?

Der Rückgabe wert von der methode get_pw() ist ein string. die variable spw habe ich nur als beispiel konstruiert in der hoffnung es wäre dann einfacher zu erklären.

meine Frage war: warum benutzt du nicht sdw.toCharArray(pw, sizeof(pw) );

Hab es vergessen für das beispiel umzuschreiben. Nach dem umschreiben ist das ergebns das selbe.

Und deine Zeile
char pw[sdmen.get_pw().length()];

sieht auch sehr verdächtig aus.

Hab es grade mit einem statischen wert probiert und das funktioniert. Nachteil ist das unbeschriebende elemente des Array ungewolte zeichen enthalten.

Das ist völlig egal. Natürlich steht in lokal alloziertem Speicher erst mal willkürliches Zeug. C Strings sind aber Null terminiert. Sobald man da was rein-kopiert ist das letzte Zeichen '\0' und alle String Funktionen bearbeiten den String nur bis dahin.

Ansonsten gibt es memset() um das auf alles auf 0 zu setzen

Hab es grade mit einem statischen wert probiert und das funktioniert. Nachteil ist das unbeschriebende elemente des Array ungewolte zeichen enthalten.

Na prima. Warens mal wieder fehlende Fehlermeldungen...
Unbeschriebene Element sind nun mal undefiniert. Die '\0' Endekennung eines char array gilt auch für Passwörter (im Klartext, zumindest)
Wenn du z.B. pw[32] lokal anlegst, ist das ja auch nur auf dem Stack, und damit nach der Benutzung der Funktion wieder frei.

Nun funktioniert alles wie es soll.
Vielen dank für eure posts.