Arduino Forum

International => Deutsch => Topic started by: rentneruwe on Feb 11, 2019, 05:51 pm

Title: String kopieren
Post by: rentneruwe on Feb 11, 2019, 05:51 pm
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
Title: Re: String kopieren
Post by: combie on Feb 11, 2019, 05:54 pm
Testbarer Code! ? !

Welchen Type hat bodyAlt?

body hat auf jeden Fall den falschen Type für die Funktion.
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 05:54 pm
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 (https://www.wikinger-tommy.de/arduino/tut_zeichenketten.html) rein.

Gruß Tommy
Title: Re: String kopieren
Post by: amithlon on Feb 11, 2019, 07:00 pm
Hallo,

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

bodyAlt = body;

Gruß aus Berlin
Michael
Title: Re: String kopieren
Post by: rentneruwe on Feb 11, 2019, 07:25 pm
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?
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 07:32 pm
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
Title: Re: String kopieren
Post by: rentneruwe on Feb 11, 2019, 07:42 pm
@ 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");}
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 07:48 pm
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
Title: Re: String kopieren
Post by: rentneruwe on Feb 11, 2019, 08:25 pm
Kann ich zwei char 11 variablen so vergleichen

Code: [Select]

if ( sensorName != sensorNameAlt){
 Blynk.email("Sensor Alarm", body);}
strcpy (sensorNameAlt, sensorName);
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 08:45 pm
Nein.
Code: [Select]

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


Gruß Tommy
Title: Re: String kopieren
Post by: rentneruwe on Feb 11, 2019, 08:55 pm
super Danke Dir,
habs auch gerade auf Deiner Seite gelesen.
funzelt prima!
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 09:22 pm
Schön, dass es funktioniert und danke für die Rückmeldung.

Gruß Tommy
Title: Re: String kopieren
Post by: Whandall on Feb 11, 2019, 09:25 pm
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.  ;)
Title: Re: String kopieren
Post by: Tommy56 on Feb 11, 2019, 09:26 pm
Danke für die Ergänzung. Das entlastet den RAM weiter.

Gruß Tommy