Forum: Mikrocontroller und Digitale Elektronik Stringarrays zeilenweise verbinden


von Array (Gast)


Lesenswert?

Hallo,

ich möchte gerne zwei Arrays miteinander verknüpfen, und zwar derart, 
dass hinter jede Zeile des einen Arrays die Zeichen des anderen angefügt 
werden.

Also

1
char Array_1[][]
2
{
3
{"Überschrift"},
4
{"Textzeile"},
5
{"Textzeile"},
6
}
7
8
Anzufügendes Array
9
10
char Array_2[][]
11
{
12
{" 1"},
13
{" 2"},
14
{" 3"},
15
}
16
17
18
Ergebnisarray[][]
19
{
20
{"Überschrift 1"},
21
{"Textzeile 2"},
22
{"Textzeile 3"},
23
}

Ist so etwas mit einfachem Aufwand möglich, ggf. sogar schon in der 
Initialisierung?

Ich brauche hinter den Zeilen des ersten Arrays immer noch eine weitere 
Kennziffer, und zwar genau dort wo der Text beendet wird.

von Nop (Gast)


Lesenswert?

Array schrieb:

> Ist so etwas mit einfachem Aufwand möglich, ggf. sogar schon in der
> Initialisierung?

Wie wäre es mit defines? C hängt statische Strings ja automatisch 
aneinander, so daß [i]"Hallo" "Welt"[/i] dasselbe ist wie [i]"Hallo 
Welt"[/i].
1
#define line_1 "Überschrift"
2
#define line_2 "Textzeile"
3
#define line_3 "Noch eine Textzeile"
4
5
#define num_1 " 1"
6
#define num_2 " 2"
7
#define num_3 " 3"
8
9
char Ergebnisarray[][]
10
{
11
{line_1 num 1},
12
{line_2 num_2},
13
{line_3 num_3},
14
};

Hab ich jetzt nicht getestet, kannste aber ja mal ausprobieren. Bei den 
Nummern kann man auch mit enums und einem String-Marko arbeiten, das 
wäre noch eleganter als defines.

von Jim M. (turboj)


Lesenswert?

Nop schrieb:
> so daß "Hallo" "Welt" dasselbe ist wie "Hallo Welt".

Nitpick: Ist nicht dasselbe. In der 1. Version fehlt das Leerzeichen.

Ich frage mich allerdings ob es nicht eine passendere Lösung fürs 
Problem gibt. Der OP will ja vermutlich sowas wie ein LCD Menü basteln.

von Joe F. (easylife)


Lesenswert?

Der einfachste Weg ist wohl sprintf()
1
char outputstring[128];
2
3
char *Array_1[] = {
4
  "Überschrift",
5
  "Textzeile",
6
  "Textzeile"
7
};
8
9
char *Array_2[] = {
10
  "1",
11
  "2",
12
  "3"
13
};
14
15
int a = 0;
16
int b = 0;
17
18
sprintf(outputstring, "%s %s", Array_1[a], Array_2[b]);

Danach steht in outputstring "Überschrift 1".
Die Leerzeichen zwischen den Strings braucht man dann auch nicht in 
Array_2 abzulegen.

Alternative wäre strcpy und strcat:
1
strcpy(outputstring, Array_1[a]);
2
strcat(outputstring, " ");
3
strcat(outputstring, Array_2[b]);

Sicherheitsbewusste Programmierer verwenden "snprintf", "strncpy" und 
"strncat".
Wenn einem die Maximallänge der Strings bekannt ist, outputstring 
genügend Platz hat, und die Strings keine Variablen sind, die von 
"aussen" änderbar sind, kann man aber auch die einfache Variante der 
Funktionen benutzen.

Ansonsten wäre das ein klassischer Angriffspunkt (buffer overflow 
vulnerability).

von Nop (Gast)


Lesenswert?

Jim M. schrieb:

> Nitpick: Ist nicht dasselbe. In der 1. Version fehlt das Leerzeichen.

Ah ja stimmt, im Democode für die Antwort hatte ich das aber dann wieder 
drin als Leerzeichen vor den Nummern.

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.