Stringarrays zeilenweise verbinden

Gast #5095698
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.
Gast #5095836
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.
#5095942
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.
#5096012
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).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.