Forum: Mikrocontroller und Digitale Elektronik Zeichenketten verknüpfen


von Tho W. (tommyprog)


Lesenswert?

Servus zusammen,

auf einen ATmega32 würde ich gerne Zeichenketten miteinander verknüpfen 
wollen.

Nun ist meine Idee die, dass ich die vorgefertigte Methode strcat (char 
Datentyp) benutze, um die vorher definierten Arrays immer weiter 
miteinander zu verknüpfen.
Das Prinzip ist von der Verknüpfung her wie im Beitrag 
Beitrag "Array of String Arrays"


Im Code sieht das so aus:
1
char arrayEINS [] = "(1111)";
2
   char arrayZWEI[] = "(222)";
3
   char arrayDREI[] = "(333)";
4
   char arrayVIER [] = "4444";
5
   char arrayFUENF[] = "5,5,5";
6
   char arraySECHS [] = "6666";
7
   char arraySIEBEN[] = "77";
8
   char arrayACHT[] = "8-8-8";
9
10
11
   strcat(arrayZWEI, arrayEINS);
12
   strcat(arrayZWEI, arrayDREI);
13
   strcat(arrayZWEI, arrayVIER);
14
   strcat(arrayZWEI, arrayFUENF );
15
   strcat(arrayZWEI, arraySECHS);
16
   strcat(arrayZWEI, arraySIEBEN);
17
   strcat(arrayZWEI, arrayACHT);
18
   
19
   
20
   
21
   while(1)
22
   {
23
     uart_puts(arrayZWEI);
24
   }

die Methode uart_puts habe ich aus den ausführlichen Tutorial von dieser 
Seite benutzt, und ich kapier auch, was sie tut.

Nur bin ich mir nicht sicher, wie ich ALLE Zeichenketten miteinander 
verknüpfen kann, da es keine Strings gibt.
(in java war es das "+", was zum Erfolg geführt hatte).

Mit obrigen Code kann ich bis zu einer scheinbar?! gewissen Länge immer 
wieder in das dest von arrayZWEI speichern, aber irgendwann werden keine 
richtigen Zeichen mehr übertragen.
(die ÜBertragung über UART habe ich bereits getestet und läuft auf einer 
einzelnen Zeichenkette oder über Zeichen einfach wunderschön ;))

Nun frage ich mich, ob ich die obrigen Arrays anders schreiben muss, 
also mit {'c'.....}, und dann einfach char str1[] = 
{"arrayinhalt1desanderenarrays", "arrayinhalt2desanderenarrays"} 
zusammenfüge.

Warum ist eigentlich die Begrenzung ab einer gewissen Länge vorhanden, 
hat das mit der Speichergröße eines Arrays zu tun? (ich habe anfangs gar 
keine feste Größe definiert, oder kann er dann diese größe nichtmehr 
umschreiben?)

Hat jemand einen Tipp (keine Lösung)?



EDIT_1: Mir scheint es so, dass ich die funktion strcat nur in 
begrenzter Anzahl hintereinander benutzen kann. Warum?

Mfg,
tommyProg

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Das wichtigste ist, das dein Zielarray auch gross genug ist!

C ist keine Schicki-Micky Sprache, in der dir das System alles abnimmt. 
Du bist dafuer verantwortlich, dass die Arrays gross genug sind und 
niemand anderer

von Peter II (Gast)


Lesenswert?

Tho Wes schrieb:
> Hat jemand einen Tipp

ja, lies dir die Grundlagen von Array in C durch.

> char arrayDREI[] = "(333)";
das ist ein Array mit der länge von 5+1 Zeichen. Mehr passt dort also 
nicht rein.

Damit ist klar, das dein Programm fleißig den Speicher überschreibt.
Man muss in C sich ein Array anlegen, das so lang ist das man alles 
reinbekommt was man braucht.

Aber warum sollte man überhaupt die Zeichenketten verketten, wenn man 
sie auch einzeln senden kann.

uart_puts(arrayEINS);
uart_puts(arrayZWEI);

schon kommen sie beim Empfänger verkettet an, und du brauchst keinen 
zusätzlichen Speicher.

von Karl H. (kbuchegg)


Lesenswert?

Tho Wes schrieb:

> (ich habe anfangs gar
> keine feste Größe definiert,

doch hast du.

mit
1
   char arrayACHT[] = "8-8-8";
definierst du ein Array mit fixer Größe. Den einzigen Komfort, den du in 
Anspruch genommen hast ist, dass der Compiler anhand der Initialisierung 
abgezählt hat, wie groß du das Array haben willst. Du hättest genausogut
1
   char arrayACHT[6] = "8-8-8";

schreiben können. Wäre genau dasselbe gewesen, was die Größe des Arrays 
anbelangt.

> Hat jemand einen Tipp (keine Lösung)?

Kauf dir jetzt endlich mal ein C-Buch und arbeite es durch.

Dann bist du auch nicht so dermassen auf dem Holzweg, wenn du sagst
> EDIT_1: Mir scheint es so, dass ich die funktion strcat nur
> in begrenzter Anzahl hintereinander benutzen kann. Warum?

: Bearbeitet durch User
von Tho W. (tommyprog)


Lesenswert?

> Aber warum sollte man überhaupt die Zeichenketten verketten, wenn man
> sie auch einzeln senden kann.

Wollte es verketten, damit ich alles in nur eine "puts funktion" 
reinschreibe

> uart_puts(arrayEINS);
> uart_puts(arrayZWEI);
>
> schon kommen sie beim Empfänger verkettet an, und du brauchst keinen
> zusätzlichen Speicher.

Okay, dann lass ich das zusätzliche verketten weg. Danke dir

von Tho W. (tommyprog)


Lesenswert?

K
> mit
>
1
>    char arrayACHT[] = "8-8-8";
2
>
> definierst du ein Array mit fixer Größe. Den einzigen Komfort, den du in
> Anspruch genommen hast ist, dass der Compiler anhand der Initialisierung
> abgezählt hat, wie groß du das Array haben willst. Du hättest genausogut

okay, Danke. Hatte das dann falsch in Erinnerung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.