String kopieren

Hallo,
kann mir jemand helfen, hab schon zig Seiten gelesen aber ich werde einfach nicht schlau.
Ich bilde einen String

String body = String("Sensor ") + sensorName + " hat ausgelöst";

Jetzt möchte ich diesen Inhalt in den String bodyAlt kopieren, wie geht das

mit strcpy(bodyAlt, body); geht es jedenfalls nicht.

In body steht nur zusammen gesetzter Text drin.

Vielen Dank schonmal

Testbarer Code! ? !

Welchen Type hat bodyAlt?

body hat auf jeden Fall den falschen Type für die Funktion.

strcpy ist für char-Arrays, nicht für Strings.

Auf Arduinos ist es auch besser, char-Arrays anstelle von String zu benutzen. Für mehr Infos schaue mal hier rein.

Gruß Tommy

Hallo,

unabhängig vom berechtigten Hinweis aus Strings und AVR:
wenn String bodyAlt also ein String ist, einfach

bodyAlt = body;

Gruß aus Berlin
Michael

ok, dann fange ich das mal andersrum an.
Hab mir das vielleicht auch zu einfach vorgestellt.
Den obigen code habe ich von blynk um Mails zu versenden

ich brauche für den Mail body den Text und den Inhalt der char Variable sensorName,
also: Sensor (Variable sensorName) hat ausgelöst.
Der Inhalt von sensorName hat höchtens 11 Zeichen.

Die Variable body möchte ich dann mit bodyAlt vergleichen und nur wenn der Inhalt != ist die Mail versenden.

Wie stelle ich das am besten an, bzw. wie sieht eine elegante Lösung aus?

Hast Du Dir die verlinkte Anleitung durchgearbeitet? Warum willst Du den ganzen Body vergleichen. Es genügt doch, die Werte zu vergleichen.

Ansonsten: 2 Char-Arrays für die zu erwartende Body-Länge, strcpy, strcat und strcmp.

Gruß Tommy

@ amithlon, Dankeschön das war ja einfach.
Jetzt brauche ich aber doch noch eine Speicherschonendere Lösung, denn der Uno kommt ans Ende.

@ Tommy56 Stimmt, ich brauch ja nur die Variable vergleichen, tzzzz da war doch was mit Wald und Bäumen ????

Eigentlich wollte ich ja nur die Variable noch im Mail body haben, aber da konnte mir der Supporter von blynk nicht weiterhelfen, ausser das ich es halt mal probieren soll.
Gibt es dafür evtl eine Lösung ?

Blynk.email("Sensor Alarm", " Der Sensor (hier die Variable) hat ausgelöst");}

Evtl. so:

char puffer[50];
char sensor[] = "Sensor1";
sprintf(puffer,""Sensor Alarm, der Sensor %s hat ausgelöst",sensor);

Aber lange Texte brauchen halt Speicher.

Gruß Tommy

Kann ich zwei char 11 variablen so vergleichen

if ( sensorName != sensorNameAlt){ 
 Blynk.email("Sensor Alarm", body);}
strcpy (sensorNameAlt, sensorName);

Nein.

if (strcmp(sensorName,sensorNameAlt) { // strcmp liefert 0 bei Gleichheit
  sie sind unterschiedlich, also tu was
}

Gruß Tommy

super Danke Dir,
habs auch gerade auf Deiner Seite gelesen.
funzelt prima!

Schön, dass es funktioniert und danke für die Rückmeldung.

Gruß Tommy

Statt

sprintf(puffer,"Sensor Alarm, der Sensor %s hat ausgelöst",sensor);

sollte man vielleicht besser

sprintf_P(puffer, PSTR("Sensor Alarm, der Sensor %s hat ausgelöst"), sensor);

nutzen. :wink:

Danke für die Ergänzung. Das entlastet den RAM weiter.

Gruß Tommy