Forum: Mikrocontroller und Digitale Elektronik String Array? oder 2-dim-Array?


von carlau (Gast)


Lesenswert?

Hi Leute,

ich möchte im Eeprom ein paar Befehle als Strings ablegen.
Allerdings möchte ich nicht, dass ich jeden Befehl über einen 
Variablennamen anspreche, sondern einfach ein Laufindex verwenden, da 
die Strings vergleichen werden. Nun stellt sich mir die Frage, ob es 
überhaupt ein Stringarray gibt und wie man sowas deklariert und 
initialisiert, oder ob ich dafür 2-dimensionale Arrays verwende.
Über eine kleine Hilfe wäre ich sehr dankbar...

MFG Carlau

von Karl H. (kbuchegg)


Lesenswert?

Wenn du genügend Platz im EEProm hast, mach alle Befehle gleich lang und 
benutze ein 2D-Array dafür.

Wenn du Platz sparen musst, mach dir ein zusätzliches Indexarray, 
welches dir die Startposition des Strings im EEProm angibt.

von carlau (Gast)


Lesenswert?

Vielen Dank für die rasche Antwort.

Die Befehle gleich lang machen ist nun nicht mehr möglich, da das 
Protokoll größtenteils steht.
Aber das mit dem 2ten Index klingt interessant und nach einer guten 
Lösung. Bloß wie könnte ich die Startpositionen der Strings in meinem 
EEPROM ermitteln. Was für ein array muss das dann sein? was muss ich da 
genau abspeichern und wie mache ich das? brauche ich da die Adresse 
meines Strings (genauer die Adresse des ersten Elements in dem 
jeweiligen String)?
Muss mein Indexarray dann vom char*-Typ oder irgendwie deferenziert also 
mit &String oder so sein?
Sorry aber strings machen mich verrückt bzw die Pointer, obwohl es ja 
nix anderes als ein nullterminiertes chararray ist.
Vielleicht kann du das näher erläutern. Wäre dir sehr dankbar...
Gruß Carlau

von Karl H. (kbuchegg)


Lesenswert?

carlau schrieb:
> Vielen Dank für die rasche Antwort.
>
> Die Befehle gleich lang machen ist nun nicht mehr möglich, da das
> Protokoll größtenteils steht.

Du hast mich missverstanden (und ich habe mich unklar ausgedrückt).
Bei einem 2D Array sind alle Zeilen gleich lang. Das heißt nicht, dass 
die Strings in dem Array alle gleich lang sein müssen. Du hast dann 
einfach nur ein paar ungenutzte Bytes zwischen den Strings.

> Aber das mit dem 2ten Index klingt interessant und nach einer guten
> Lösung. Bloß wie könnte ich die Startpositionen der Strings in meinem
> EEPROM ermitteln.

Mit dem AdressOf-Operator?

> Was für ein array muss das dann sein?

Ein Array von Pointer auf char?

> was muss ich da
> genau abspeichern

Würd ich gar nicht.
Das Indexarray würde ich beim Programmstart zusammenbauen.
1
char Text1[] = "Hallo";
2
char Text2[] = "Welt";
3
4
char* Texte[2];
5
6
int main()
7
{
8
  Texte[0] = Text1;
9
  Texte[1] = Text2;
10
11
  for( i = 0; i < 2; ++i )
12
    printf( "%s\n", Texte[i] );
13
}

Du baust jetzt um auf: Texte sind im EEPROM

Wenn du damit durch bist, kannst du dich ja damit versuchen auch das 
Texte Array ins EEPROM zu verfrachten und vom Compiler initialisieren zu 
lassen
1
char Text1[] = "Hallo";
2
char Text2[] = "Welt";
3
4
char* Texte[] = { Text1, Text2 };
5
6
int main()
7
{
8
  for( i = 0; i < 2; ++i )
9
    printf( "%s\n", Texte[i] );
10
}

von carlau (Gast)


Lesenswert?

Danke nochmal für die Erläuterung. Werd mich nun mal dransetzen... genug 
gelesen...

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.