String bzw. Char zusammen fügen

Hallo,

ich möchte ein char einem Wert zuweisen und diesen dann mit einem anderen char zusammen fügen.

char                  ID_Master[]                       = "ID8749329";

char                  ID_MQTT_X[]                       = "/SensorIdentification/";                       //Sensoridentifikation
char                  ID_MQTT_X[]                       = "/SensorIdentification/" & "ID8749329";                       //Sensoridentifikation

Es soll das rauskommen: /SensorIdentification/ID8749329

Liest Du das hier.

Gruß Tommy

Hallo,

oder das lesen link

char s1[20]="Haus";
char s2[10]="hund";

void setup() {
Serial.begin(9600);
strcat (s1,s2);
Serial.print(s1); // gibt "Haushund" aus
}

void loop() {
 
}

Heinz

Wichtig ist übrigens die 20 in Rentner's

char s1[20]="Haus"; //

Das unterscheidet sich wesentlich gegenüber #0

Auch kann man oft sinnvoll die generelle Aufgabenstellung "zusammenfügen" in Frage stellen.

const char s1[]="Haus";
const char s2[]="hund";
Serial.print(s1); Serial.print(s2);// gibt "Haushund" aus

Der Empfänger merkt keinen Unterschied!

Danke für die Antworten.

Vom Prinzip hergeht es, aber, wenn ich strcat mehrmals verwende ist nur der letzte strcat richtig.

char                  ID_Master[]                         = "1094";                                               //10 = Wohnzimmer

char                  ID_MQTT_ID[]                        = "/SensorIdentification/ID";                           //Sensoridentifikation              
char                  ID_MQTT_TIM[]                       = "/Time/TIM";                                          //Time       

char                  ID_MQTT_01[]                        = "/Sensor/Light/SEN01 ";                               //Lichtsensor ( lux )                 I2C

char                  ID_MQTT_02[]                        = "/Sensor/TempAmbient/SEN02";                          //Umgebungstemperatur IR ( C )        I2C
char                  ID_MQTT_03[]                        = "/Sensor/TempObjekt/SEN03";                           //Objekttemperatur IR ( C )           I2C
  strcat (ID_MQTT_TIM,   ID_Master);                                                                              //Topic um ID erweitern
  strcat (ID_MQTT_01,    ID_Master);                                                                              //Topic um ID erweitern
  strcat (ID_MQTT_02,    ID_Master);                                                                              //Topic um ID erweitern
  strcat (ID_MQTT_03,    ID_Master);                                                                              //Topic um ID erweitern

Ergebnis:

23:07:10.785 -> 094 --> 01:00:26
23:07:10.785 -> 094 --> 24.77
23:07:10.785 -> 094 --> 24.77
23:07:10.785 -> /Sensor/TempObjekt/SEN031094 --> 24.95

Das Ziel des strcat muss genug Platz für den Inhalt haben.
Dein ID_MQTT_TIM hat nur den Platz für "/Time/TIM"

Gruß Tommy

Bitte strncat() oder strlcat() verwenden. Dann zerschießt man sich bei solchen Fehlern wenigstens nicht das Programm

Trotzdem muss man bei C String immer über die Länge des Ziel-Arrays nachdenken

Hey Tommoy,

mit der Länge hatte ich gelesen. Wenn ich die Länge vorgebe geht es.
Aber warum macht er das bei einem starct bzw. beim letzten dann richtig.

Hey Serenifly,

werde nach her mal lesen, was der Unterschied ist. Danke.

Du schreibst bei sowas über das Array hinaus in den Speicher dahinter.

Hallo,

die beiden Zeilen in meinem Beispiel

char s1[20]="Haus";
char s2[10]="hund";

sollten Dir eigendlich zeigen das s1 mit dem wert in der Klammer doppelst so lang dimensioniert werden muss. s2 muss ja beiden Zeichenketten aufnehmen können.War mein Fehler hätte ich dran schreiben müssen. Du musst dir bewust darüber sein wie lang deine Zeichenketten werden können. Mach sie auf jeden Fall lang genug, ansonsten kann das böse enden. Unter unglücklchen Umständen kann ein Teil des Programms überschrieben werden und dann landet der Controler im Bermuda Dreieck, aber das sind ja schon ganz andere Dinge verschwunden. :slight_smile:

In deimen Fall sind die Ketten je etwa 25 Zeichen lang und daran willst du ID_master dranhängen. Da würde ich 40 je in die eckige Klammer schreiben. Dann hast Du vieleicht 30 byte verschenkt bist aber auf der sicheren Seite.

Heinz

Danke.

Serenifly, ok und das geht nur bei dem letzten.

Renter, meine Programm ist aus dem Bermuda Dreieck wohl wieder da :slight_smile: