Mehrdimensionales Array char/int

Gast #3280162
Lesenswert?

Hallo,

ich versuche mich derzeit an Mehrdimensionalen arrays in c. (PIC 
Mikrocontroller, C18 Compiler)


Ich bin nachdem ich den Artikel über Strings und Mehrdimensionale Arrays 
gelesen habe davon ausgegangen, dass die Zahl in der 1. Klammer im 
prinzip die "Adresse" im array ist und die Zahl in der 2. Klammer der 
für den String zur verfügung stehende Platz darstellt. Ich glaube da 
liege ich falsch.

Was ich vor hab: Ein Array in dem verschiedene Strings gespeichert sind 
die ich dann mittels über das Array aufrufen kann.

BYTE Befehl[2][16];

strcpypgm2ram(Befehl[0][0],"Aus");
strcpypgm2ram(Befehl[1][0],"An");
strcpypgm2ram(Befehl[2][0],"Stop");
...usw.



Hat von euch einer eine idee?
Gast #3280195
Lesenswert?

Gerd schrieb:
> Hat von euch einer eine idee?

zeichen speichert man nicht in bytes. Dafür gibt es char.

wenn du 2 Dimensionen brauchst, dann brauchst du auch mindestnes 2 werte 
dafür. Damit ist auch klar war die [] zu bedeuten haben.

Und wenn jetzt noch Strings gespeichert werden sollen, dann muss als 
Datentype char* nehmen.

damit ergibts sich

char* Befehl[2][16];

das hat aber den nachteil das man den Speicherplatz für den String erst 
besorgen muss. Wenn man die maximale länge des Strings kennt kann man es 
auch so machen.

char Befehl[2][16][maxlen];

damit wird aber immer der speicher für die Maximale länger verbraucht.
Brauchst du denn überhaupt eine Mehrdimensonales array ist machst du das 
nur wegen dem string?
Gast #3280196
Lesenswert?

Gerd schrieb:
> dass die Zahl in der 1. Klammer im
> prinzip die "Adresse" im array ist und die Zahl in der 2. Klammer der
> für den String zur verfügung stehende Platz darstellt. Ich glaube da
> liege ich falsch.

Kann man sich schon so vorstellen. Wobei man das ganze auch vertauschen 
kann, aber tut nichts zur Sache.
Wie genau war dann aber deine Frage?
Gast #3280204
Lesenswert?

Peter II schrieb:
> char* Befehl[2][16];

Nicht ganz... Im Beispiel des TO wird Befehl[0][0] - Befehl[2][0] 
verwendet, deshalb eher wohl
1
char* Befehl[3][16];

Wobei die 16 die maximale Zeichenzahl pro String inkl. abschließender 
Null darstellen wird, also nicht auf eine dritte Dimension aufgeblasen 
werden muss

Peter II schrieb:
> char Befehl[2][16][maxlen];

also resultierend:
1
char* Befehl[AnzahlStrings][AnzahlZeichen+1];
Gast #3280333
Lesenswert?

Gerd schrieb:
> Ich bin nachdem ich den Artikel über Strings und Mehrdimensionale Arrays
> gelesen habe davon ausgegangen, dass die Zahl in der 1. Klammer im
> prinzip die "Adresse" im array ist und die Zahl in der 2. Klammer der
> für den String zur verfügung stehende Platz darstellt.

Im Prinzip schon.
Allerdings gibt die Zahl in den [] bei der Definition des Array die 
Anzahl der Elemente an.
Beim Zugriff auf das Array fängt die Zählung bei 0 an. Somit ist der 
Index vom höchsten Element um eins niedriger als die Zahl bei der 
Definition.

Bei
1
char Befehl[2]
hast du als ein Array mit zwei Elementen, die du über die Indizes 0 und 
1 ansprechen kannst.

Das strcpypgm2ram erwartet als ersten Paramter einen Zeiger auf das 
Array.
Darum musst du der Variable den Adressoperaqtor & voran stellen.
1
strcpypgm2ram(&Befehl[0][0],"Aus");

Es geht auch ohne den zweiten Index. Das gibt dann gleich die Adresse 
(Daher ohne &).
1
strcpypgm2ram(Befehl[0],"Aus");

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren