INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Strings verketten
27.11.2020, 19:59
Beitrag #1
Strings verketten
Hallo Forum

nachdem ich glaubte, mein erstes Projekt erfolgreich beeendet zu haben, musste ich bei Verwendung des Codes auf neue Hardware feststellen, dass ich nicht sauber gearbeitet habe. Ursache: wahrscheinlich die Verwendung von String (insbesondere die Hinweise von Tommy machen mich sehr skeptisch, ob String richti ist) für die Defintion von Variablen.

Also flugs versucht, das jetzt richtig zu machen und statdessen char zu verwenden.
Aber: sang- und klanglos gescheitert. Hier der Code (bitte beachtet auch die Remarks zu den Ergebnissen):
Code:
void setup()
{
char vergleich[] = "Vergleich";
char quelle[] = "Quelle";
char *zeiger;
char ziel[128];

Serial.begin(9600);                                   //Serielle Verbindung starten

zeiger = strcpy(ziel, quelle);
Serial.print("Kopie eines Strings nach Ziel: ");      //Erwartetes Ergebnis: Quelle
Serial.println(zeiger);                               //Realisiertes Ergebnis: Quelle

zeiger = strcat(vergleich, quelle);
Serial.print("Zwei Strings verketten: ");             //Erwartetes Ergebnis: VergleichQuelle
Serial.println(zeiger);                               //Realisiertes Ergebnis: VergleichQuelle

ziel[0] = '\0';                                       //Reset auf Startposition des Zielbuffers
zeiger = strcat(ziel, quelle);                        //Erwartetes Ergebnis: Quelle
Serial.println(zeiger);                               //Realisiertes Ergebnis: uelle

strcat(ziel, "____");                                 //Hinzufügen eines weiteren Strings
Serial.println(ziel);                                 //Erwartetes Ergebnis: Quelle____
                                                      //Realisiertes Ergebnis: uelle____
                                                      
strcat(ziel, vergleich);                              //Hinzufügen eines weiteren Strings  
Serial.print("Mehrere Strings verkettem: ");          //Erwartetes Ergebnis: Quelle___Vergleich
Serial.println(ziel);                                 //Realisertes Ergebnis: uelle____VergleichQuelle

ziel[0] = '\0';                                       //Reset auf Startposition des Zielbuffers
strcat(ziel, "Probe");                                //Erwartetes Ergebnis: Probe  
Serial.print("Probe: ");                              //Realisiertes Ergebnis: Probe
Serial.println(ziel);

ziel[0] = '\0';                                       //Reset auf Startposition des Zielbuffers
strcat(ziel, quelle);
Serial.print("Quelle: ");                             //Erwartetes Ergebnis: Quelle
Serial.println(ziel);                                 //Realisieres Ergebnis: uelle  

ziel[0] = '\0';                                       //Reset auf Startposition des Zielbuffers
strcat(ziel, vergleich);                              //Erwartetes Ergebnis: Vergleich
Serial.print("Vergleich: ");                          //Realisiertes Ergebnis: VergleichQuelle
Serial.println(ziel);
}

//================================================================================​=============================    
void loop()                                           //Start Hauptprogrammm
{
}
Was läuft schief?

Beste Grüsse

Thorsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 20:36 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 20:38 von MicroBahner.)
Beitrag #2
RE: Strings verketten
Hier liegt dein Problem:
Code:
zeiger = strcat(vergleich, quelle);
Du hängst den Inhalt von 'quelle an 'vergleich' an. Das char-Array 'vergleich' hat aber gar keinen Platz dafür, da Du es nur genau so groß definiert hast, das nur "Vergleich" hineinpasst. Damit überschreibst Du folgende Speicherbereiche ( so wie es aussieht ist das 'quelle' ). Und dann kommt bei den folgenden Zuweisungen Mist raus.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 20:53
Beitrag #3
RE: Strings verketten
Um es nochmal anders zu formulieren:
Bei strcat(ziel, hinzu) muss in ziel genügend Platz für den verketteten String sein. Der Rückgabezeiger ist gleich ziel.
Dieses und einige andere Infos zur Arbeit mit Zeichenketten habe ich mal in einem Tutorial zusammengeschrieben.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 20:55
Beitrag #4
RE: Strings verketten
Hallo Franz-Peter

Danke sehr - das ist sicher ein Thema.

Aber: was läuft beim letzten Beispiel verquer?

Leider kann ich das heute nicht mehr checken - Schatzi meckert schon

Schönen Abend

Thorsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 20:58
Beitrag #5
RE: Strings verketten
(27.11.2020 20:53)Tommy56 schrieb:  Um es nochmal anders zu formulieren:
Bei strcat(ziel, hinzu) muss in ziel genügend Platz für den verketteten String sein. Der Rückgabezeiger ist gleich ziel.
Dieses und einige andere Infos zur Arbeit mit Zeichenketten habe ich mal in einem Tutorial zusammengeschrieben.

Gruß Tommy

Danke Tommy. Das Tutorial habe ich schon studiert - leider erst nach den Problemen mit String

Schönen Abend

Thorsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 21:24 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 21:52 von MicroBahner.)
Beitrag #6
RE: Strings verketten
Hallo Thorsten,
(27.11.2020 20:55)TGL schrieb:  Aber: was läuft beim letzten Beispiel verquer?
Er zeigt dir genau das Ergebnis von deinem ersten fehlerhaften strcat. Es ist ja nicht so, dass die Verkettung nicht stattgefunden hätte. An der Stelle, wo vorher "Vergleich" stand steht dadurch jetzt "VergleichQuelle". Nur dass das in den folgenden Speicherbereich hineinragt. Dass dieser folgende Speicherbereich dein Array 'quelle' ist, sieht man auch an den folgenden Ergebnissen mit 'quelle' - da steht nämlich jetzt nur noch "uelle", weil das 'Q' an den Platz des ehemaligen \0 am Ende von "Vergleich" gerückt ist, und so ragt nur noch "uelle" in den Speicherbereich von 'quelle' hinein.
Und das gesamte "VergleichQuelle" wird im letzten Beispiel nach 'ziel' kopiert.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 21:25
Beitrag #7
RE: Strings verketten
(27.11.2020 20:58)TGL schrieb:  Danke Tommy. Das Tutorial habe ich schon studiert - leider erst nach den Problemen mit String

Ich habe gerade printf und seine Verwandten ergänzt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2020, 16:13
Beitrag #8
RE: Strings verketten
Hallo Ihr Lieben

so, Schatzi hat mich wieder zum Arduino gelassen Shy

Und siehe da: es läuft.

Besten Dank für Eure Erläuterungen - jetzt ist klar, was für einen Unsinn ich programmiert habe.

Beste Grüsse

Thorsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Bin ich zu blöd für c-Strings? devnull69 8 703 08.12.2020 16:36
Letzter Beitrag: Tommy56
  Splitten von Strings reinhard-adam 4 551 06.10.2020 17:13
Letzter Beitrag: Tommy56
  Umwandlung eines Strings in ein time_t-Objekt jalu4601 1 913 02.01.2020 10:56
Letzter Beitrag: RolandF
  Strings erstellen und vergleichen BennIY 4 5.032 22.06.2016 10:37
Letzter Beitrag: SkobyMobil
  viele Strings in "Datenbank" - wie am besten?? DL1AKP 2 2.336 30.03.2015 11:49
Letzter Beitrag: DL1AKP

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste