Go Down

Topic: String kopieren (Read 310 times) previous topic - next topic

rentneruwe

Hallo,
kann mir jemand helfen, hab schon zig Seiten gelesen aber ich werde einfach nicht schlau.
Ich bilde einen String
<code>
String body = String("Sensor ") + sensorName + " hat ausgelöst";
</code>

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

combie

Testbarer Code! ? !

Welchen Type hat bodyAlt?

body hat auf jeden Fall den falschen Type für die Funktion.
Nobody is perfect!
(und selbst der nicht zu 100%)

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

amithlon

Hallo,

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

bodyAlt = body;

Gruß aus Berlin
Michael

rentneruwe

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?

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

rentneruwe

@ 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");}

Tommy56

Evtl. so:
Code: [Select]

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

rentneruwe

#8
Feb 11, 2019, 08:25 pm Last Edit: Feb 11, 2019, 08:38 pm by rentneruwe
Kann ich zwei char 11 variablen so vergleichen

Code: [Select]

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

Tommy56

Nein.
Code: [Select]

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


Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

rentneruwe

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

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Whandall

Statt
Code: [Select]
sprintf(puffer,"Sensor Alarm, der Sensor %s hat ausgelöst",sensor);
sollte man vielleicht besser
Code: [Select]
sprintf_P(puffer, PSTR("Sensor Alarm, der Sensor %s hat ausgelöst"), sensor);
nutzen.  ;)
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up