www.mikrocontroller.net

Forum: PC-Programmierung String


Autor: Devil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wie kann ich z.B. in C++ drei unterschiedliche Texte in ein String 
unterbringen? Die größe von den jeweiligen Texten soll gleich sein.

#define TEXT1 "HALLO"
#define TEXT2 "DAS IST EIN TEST"
#define TEXT3 "NUR SO"

diese Texte sollen in ein String "text_buffer" kopiert werden, mit einer 
definierten Größe:

char text_buffer[90];

Der Text1, Text2 und Text3 sollen jeweils 30 Characters enthalten.

Zuerst Text1 dann Text2 und zum Schluss Text3 in den text_buffer 
kopieren.

Wie könnte man so was in C / C++ realisieren???

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist aber schon aufgefallen, daß die drei von Dir definierten 
Textkonstanten

  - unterschiedlich lang sind
  - deutlich kürzer als 30 Zeichen sind?

Versuche mal genau zu beschreiben, wie der Inhalt von "text_buffer" nach 
einer Deiner Kopieroperationen aussehen soll.

Anhand Deiner "Vorgaben" ist das ... rätselraten.

Oder möchtest Du, daß mit jeweils 30 Zeichen Abstand in text_buffer die 
drei Stringkonstanten kopiert werden sollen?

Das ginge (in C) so:
memset(text_buffer, 0, 90);  // Puffer definiert löschen
strcpy(text_buffer, TEXT1);
strcpy(text_buffer + 30, TEXT2);
strcpy(text_buffer + 60, TEXT3);

Aber das wirst Du vermutlich nicht gemeint haben.

Autor: Devil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Rufus t. Firefly.

Genau das habe ich gesucht.

Besten Dank!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher dass du den Zwischenraum nicht eher mit Leerzeichen auffüllen 
wolltest? So erscheint mir das ziemlich sinnlos.

strcpy & Co. sind gefährlich. Wenn TEXT3 wirklich 30 Zeichen (entspricht 
31 Bytes) lang ist, dann ergibt obiger Code schon einen 
Speicherzugriffsfehler. Oder jemand kommt irgendwann mal auf die Idee 
TEXT3 noch weiter zu verlängern oder zur Laufzeit zu erzeugen, und schon 
hast du den Salat. Ich würde mir deshalb lieber mal anschauen ob man 
nicht mit snprintf das Gewünschte ereichen kann, das ist sicherer, weil 
nie über die angegebene Länge hinaus geschrieben wird, und das Ergebnis 
garantiert immer Null-terminiert ist.

Wenn du wirklich C++ programmieren möchtest, dann lass am besten das 
Gebastel mit den char-Arrays ganz sein und verwende stattdessen die 
String-Klasse.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.