C String Literals aneinander hängen

Gast #4556684
Lesenswert?
• ▲
▼
Hi,
ich habe nen 32bit ARM µC und entwickle ein mehrsprachiges Menü.
Die Sprache soll zur Laufzeit wechselbar sein.

Mein Ansatz:
1
#define TEXT_MAXLEN 20
2

3
typedef enum {
4
  LANG_EN, LANG_DE, LANG_COUNT
5
} Language_t;
6

7
typedef enum {
8
  TXT_BASE, TXT_SETTINGS, TXT_COUNT
9
} Text_t;
10

11
const char txt[LANG_COUNT][TXT_COUNT][TEXT_MAXLEN] = {
12
  // LANG_EN
13
  { "Base", "Settings", },
14
  //LANG_DE
15
  { "Basis", "Einstellungen", }
16
  };

Das dürfte der gängige Ansatz sein den die meisten verwenden. Allerdings 
verschwende ich hier viel Flash-Speicherplatz wenn die Strings im 
Schnitt deutlich kürzer als die maximale Länge sind.

Daher meine Idee:
1
const char[] text = "Base\0Settings\0Basis\0Einstellungen";
2
const char* txt[LANG_COUNT][TXT_COUNT] = ... // Pointer auf den Anfang der Strings

Da ich für diesen Ansatz jedoch zur Compiletime die Pointer brauche bin 
ich mir relativ sicher, dass sich das nicht sauber umsetzen lässt.

Hat jemand eine Idee wie man sowas elegant hin bekommt oder geht das 
einfach nicht?

PS: Ja ich weiß dass ich genug Speicher habe und nicht sparen muss bei 
deim 32bit ARM, mich interessiert eher ob das generell geht.
#4556724
Lesenswert?
• ▲
▼
Nein, das Array wird immer LANG_COUNT  TXT_COUNT  größter String gross 
sein, egal wie lange die Strings darin sind. Glaube ich...

Es muss in der Art gemacht werden:
1
    const char text[] = "Base\0Settings\0Basis\0Einstellungen";
2
    int textLen = 20; // geraten, nicht gezählt
3
    int n = 1;
4
    // finde den n-ten String
5
    printf("%s",returnText(text,n,textLen));

Die Funktion returnText findet den n-ten String, die musst du halt 
schreiben.

Antwort schreiben

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.

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.