www.mikrocontroller.net

Forum: Compiler & IDEs Strings mit char verknüpfen


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne zwei char-Werte an einen sechselementigen String 
hängen, bei dem ich zuvor aber das letzte Element lösche. Am Ende soll 
der String also sieben Elemente haben. Ich fange gerade erst mit 
Pointern, etc. an und stehe gerade etwas auf dem Schlauch.

Vielleicht kann mir ja jemand helfen.

Daniel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel wrote:
> Hallo,
>
> ich möchte gerne zwei char-Werte an einen sechselementigen String
> hängen, bei dem ich zuvor aber das letzte Element lösche. Am Ende soll
> der String also sieben Elemente haben. Ich fange gerade erst mit
> Pointern, etc. an und stehe gerade etwas auf dem Schlauch.
>
> Vielleicht kann mir ja jemand helfen.

Dazu brauchst du keine Pointer.
char Zeichen1 = 'a';
char Zeichen2 = 'b';

char Result[8];   // muss mindestens die Laenge 8 haben:
                  // 7 Zeichen + '\0'

   strcpy( Result, "012345" );   // deine 6 Zeichen

   Result[5] = Zeichen1;
   Result[6] = Zeichen2;
   Result[7] = '\0';

Es muss aber scihergestellt sein, dass da auch wirklich
6 Zeichen als Vorgabe im String waren. 5 wuerden auch
noch gehen. Wenns aber nur 4 waren, wird obiges nicht
funktionieren.
Wenn die 6 Zeichen als 'bis zu 6 Zeichen' zu lesen sind,
dann muesste man eine andere Strategie anwenden:
char Zeichen1 = 'a';
char Zeichen2 = 'b';

char Result[8];

  strcpy( Result, "012" );    // deine Vorgabe. Hier soll passieren:
                              // das letzte Zeichen weg und dafür
                              // Zeichen1 und Zeichen2 hinten dran

  // erst mal feststellen, wieviele Zeichen in der Vorgabe sind
  int i = strlen( Result );   // im obigen Beispiel sind es 3

  if( i > 0 ) {               // das vorlezte Zeichen kann natürlich
                              // nur dann geloescht werden, wenn es auch
                              // mindestens 1 Zeichen gibt
    Result[i-1] = Zeichen1;
    Result[i]   = Zeichen2;
    Result[i+1] = '\0';
  }
  else {
    Result[i]   = Zeichen1;
    Result[i+1] = Zeichen2;
    Result[i+2] = '\0';
  }

den letzten Abschnit könnte man auch eleganter schreiben

  if( i == 0 ) {              // das vorlezte Zeichen kann natürlich
                              // nur dann geloescht werden, wenn es auch
                              // mindestens 1 Zeichen gibt
    i = 1;
  }

  Result[i-1] = Zeichen1;
  Result[i]   = Zeichen2;
  Result[i+1] = '\0';


Wenn man unbedingt möchte könnte man auch mit str... Funktionen
ran gehen:
char tmp[3];

  tmp[0] = Zeichen1;
  tmp[1] = Zeichen2;
  tmp[2] = '\0';

  i = strlen( Result );

  if( i == 0 ) {              // das vorlezte Zeichen kann natürlich
                              // nur dann geloescht werden, wenn es auch
                              // mindestens 1 Zeichen gibt
    i = 1;
  }

  strcpy( &Result[i-1], tmp );

  

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.