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?
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é
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?
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?
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]; |
Michael schrieb: > also resultierend: > char* Befehl[AnzahlStrings][AnzahlZeichen+1]; dann ist aber der * falsch char Befehl[AnzahlStrings][AnzahlZeichen+1];
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"); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.