mikrocontroller.net

Forum: Compiler & IDEs strcat um an array anzuhängen??


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

kann ich strcat(buffer,byte) nehmen um in einem Array[100] ein wert 
anzuhängen.


bsp:

unsigned char Array[100];

Inhalt von array=0;1;2;3;7 usw. Speicher Pages.
ich lese den letzten wert von array+1 um auf eine neue speicher Page 
zuzugreifen.
nachdem will ich die neue Page an das array anhängen.
unsigned char byte;

kann ich das mit strcat machen???


Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
str***() Funktionen funktionieren, wie der Name schon vermuten läßt, nur 
auf Strings.

D.h. sie benötigen immer die abschließende 0 und erlauben keine 0 
mittendrin.


Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Ausserdem ist strcat etwas überkandidelt um ein einzelnes
Byte anzuhängen.
Du kennst doch den Array Index des letzten, in Array benutzen
Bytes. Warum weist du nicht einfach dorthin zu und erhöhst
den Belegtzähler?

unsigned char PageCount;
unsigned char Pages[100];

 ....

 /* Pages enthält zb. 0, 2, 5, 6
    PageCount ist daher 4
 */

  if( PageCount < 100 )
    Pages[PageCount++] = 8;   /* neue Page hinzufügen */
  else
    /* Fehler: Page Tabelle ist voll */
    ;

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mit den Pages das geht so aber wie kann ich nur einzelne texte 
ranhängen


ich habe ja 528byte pro page.

ich  lese immer nur 38 byte ein und muß diese an den Buffer hängen der 
dann wenn 528 Byte drinn sind an die page die werte übergibt.


char texte[39];
char buffer[529];

if(geschrieben<528)
{
//texte an buffer anhängen mit ?????strcat????
}


wie kann ich den text an den buffer anhängen????
mit strcat oder????
wo muß die null stehen????

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

Bewertung
0 lesenswert
nicht lesenswert
> wie kann ich den text an den buffer anhängen????
> mit strcat oder????

Ja. Ist eine Möglichkeit

> wo muß die null stehen????

Die '\0' steht immer nach dem letzten gültigen Zeichen
im Array.

Wenn also das Buffer Array am Anfang kein Zeichen
enthält, dann ust Buffer[0] == '0'

Willst do dort den Text "Ma" anhängen, dann machst
du

   strcat( Buffer, "Ma" );   // Oder für "Ma" ein anderes Array,
                             // das den String "Ma" enthält

Buffer sieht dann so aus

   +---+---+---+---+---+---+---+- ... -+---+---+
   | M | a |\0 |   |   |   |   |       |   |   |
   +---+---+---+---+---+---+---+- ... -+---+---+

so jetzt hängen wir noch "rt" dran

  strcat( Buffer, "rt" );

   +---+---+---+---+---+---+---+- ... -+---+---+
   | M | a | r | t |\0 |   |   |       |   |   |
   +---+---+---+---+---+---+---+- ... -+---+---+

und zum Schluss

  strcat( Buffer, "in" );

   +---+---+---+---+---+---+---+- ... -+---+---+
   | M | a | r | t | i | n |\0 |       |   |   |
   +---+---+---+---+---+---+---+- ... -+---+---+

Das einzige worauf du aufpassen musst ist, dass das
Endergebnis nie länger wird als der Buffer fassen
kann (die abschliessende '\0' nicht vergessen).

Wenn du selbst nicht dafür sorge tragen kannst, willst
oder musst, dann lieber strncat anstatt strcat verwenden.


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.