Mehrdimensionales Array char/int

Gast #3280162
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
1
char Befehl[3][16] = {"Aus", "An", "Stop"};

Wenn Du nur einen String möchtest, hast Du ja:
1
char Befehl[16];

Nun kommt nur noch das Array hinzu. Siehe oben.

Grüsse,
René
Gast
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 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.