# Länge eines char[][]



## Simon_Flagg (28. Mrz 2011)

Wie kann man bei einem char[][] in c++ die anzahl der Spalten (erste []) herausfinden, wenn die Zeilen (zweite []) nicht alle gleich lang sind?

danke


----------



## XHelp (28. Mrz 2011)

```
sizeof(some_array)
sizeof(some_array[0])
```
(eher vermutet)


----------



## Runtime (28. Mrz 2011)

Mach eine for-Schleife und addiere die Länge aller Unterarrays zu einer Variable.


----------



## Andi_CH (29. Mrz 2011)

Runtime hat gesagt.:


> Mach eine for-Schleife und addiere die Länge aller Unterarrays zu einer Variable.


addieren??? Wer lesen kann ist definitv im Vorteil :-( das war nie gefragt.
Leute lest doch erst die Postings bevor ihr unpassende Antworten gebt!

"Spalten" ist bei einem Array ein undefinierter Begriff.

Die Anzahl der gespeicherten Element bekommt man mit .length - es spielt überhaupt keine Rolle was für Elemente das sind und ob überhaupt was drin ist (Wie die erste Zeile des Outputs zeigt - zu diesem Zeitpunkt ist noch 5 mal "null" drin)


```
public class Test1 {

	public static void main(String... args) {
		char[][] charArr = new char[5][];
		System.out.println("charArr.length = " + charArr.length);
		charArr[0] = new char[1];
		charArr[1] = new char[2];
		charArr[2] = new char[3];
		charArr[3] = new char[4];
		charArr[4] = new char[5];
		System.out.println("charArr.length = " + charArr.length);
		for (int i=0; i<charArr.length; i++) {
			System.out.println("charArr[" + i + "].length = " + charArr[i].length);
		}
	}
}
```

Output:

```
charArr.length = 5
charArr.length = 5
charArr[0].length = 1
charArr[1].length = 2
charArr[2].length = 3
charArr[3].length = 4
charArr[4].length = 5
```


----------



## AmunRa (29. Mrz 2011)

Andi_CH hat gesagt.:


> Wer lesen kann ist definitv im Vorteil das war nie gefragt.


Diesen Rat kann ich nur zurückgeben, da hier nach c++ gefragt wurde und nicht nach java


ich glaub das wird recht schwierig,

um das ganze für ein eindimensionales Array zu machen, musst du es so errechnen.


```
sizeof(myArray) / sizeof(char)
```
und wahrscheinlich pro Zeile geht das dann auch noch so,


```
sizeof(myArray[i]) / sizeof(char)
```

dass Problem ist in diesem Fall dass wir aber keine Aussage treffen können über die Länge der Zeilen

sonst würds da wohl eher so iwie gehen


```
sizeof(myArray) / sizeof(myArray[0]);
```
ich hoffe das hilft dir iwie weiter, auch wenn ich mal vermute,dass du dies bereits alles gefunden hast.


----------



## Andi_CH (29. Mrz 2011)

AmunRa hat gesagt.:


> Diesen Rat kann ich nur zurückgeben, da hier nach c++ gefragt wurde und nicht nach java



Ok, da nächste mal schreibe ich wieder explizit hin, dass es sich hier um ein Java-Forum handelt, wenn sonst der Wink mit dem Zaunpfahl nicht ankommt.


----------



## AmunRa (29. Mrz 2011)

Das ist hier die Ecke Softwareentwicklung wo explizit dabei steht, dass auch Fragen zu anderen Programmiersprachen hier her gehören. Also ist die Frage absolut berechtigt.


----------



## hartzie (29. Mrz 2011)

Um deine ursprüngliche Frage zu beantworten: Nein das wird schwierig. Mit sizeof wie du wahrscheinlich schon herausgefunden hast, kannst du nur die Gesamtanzahl von belegten Bytes herausfinden. Bei einem char-Array mit unterschiedlichen Längen kriegst du das mit sizeof nicht direkt so hin. Auf Umwegen geht es vielleicht, wenn du iterativ durch jede Spalte gehst und dann das von dem gesamten Speicherbedarf subtrahierst und dies solange machst bis du bei 0 ankommst, dann wiederum ist dein Laufindex deine Anzahl von Spalten.


----------



## ARadauer (29. Mrz 2011)

hartzie hat gesagt.:


> Nein das wird schwierig.



Die Frage ist halt was ist die Frage.. :toll:
Also wenn man ein 2dim Array als Feld sieht, hat das natürlich zeilen und spalten. Wenn dann diese Zeilen unterschiedlich lange Spalten haben und man wissen will wie viele Spalten das Feld hat (also die Breite) ,dann sucht man einfach das Maximum...


```
public static void main(String[] args) {
      int[][] feld = {{1,2,3},{4,5},{6,7,8,9}};
      int col = 0;
      for(int zeile = 0 ; zeile < feld.length; zeile++){
         if(feld[zeile].length>col)
            col = feld[zeile].length;
      }
      System.out.println(col+" Spalten");
   }
```


----------



## hartzie (29. Mrz 2011)

Ich möchte dich nur ungern darauf hinweisen, aber die Frage war wie man erst die Anzahl der Arrays in einem zweidimensionalen Array in *C++* herausfindet. Wobei mir nebenbei aufgefallen ist, dass in C++ keine unsymetrischen Arrays gibt. Also du kannst nicht wie in Java sowas machen 
	
	
	
	





```
int[][] feld = {{1,2,3},{4,5},{6,7,8,9}};
```
 sondern musst immer das machen 
	
	
	
	





```
char array[10][5]
```
.


----------



## fastjack (29. Mrz 2011)

also wenn ich nach "c++ array länge" google, bekomme ich über zwei Millionen Ergebnisse... mit verschiedenen Ansätzen die Länge eines Array (auch mehrdimensional) herauszufinden und nebenbei verschiedene c++-Foren.


----------



## Andi_CH (29. Mrz 2011)

AmunRa hat gesagt.:


> Das ist hier die Ecke Softwareentwicklung wo explizit dabei steht, dass auch Fragen zu anderen Programmiersprachen hier her gehören. Also ist die Frage absolut berechtigt.


Mea culpa - ich habs mir gemerkt.

C++ bietet keine Möglichkeit herauszufinden wie lange ein Array ist, sonst könnte man ja nicht hemmungslos darüber hinaus iterieren.

Assymetrische Arrays gibt es schon - Das erste ist ein array von Pointern und die zeigen auf was auch immer sie wollen - That's C-Life  und C++ ist halt eben nur C mit etwas ++.

Aber eben - man muss sehr genau wissen wir lange jedes der Elemente ist - ist wohl kein gangbarer Weg.


----------



## Simon_Flagg (29. Mrz 2011)

also geht so was nicht, danke

@Amunra: danke, aber auf die idee bin ich schon selbst gekommen...
@hartzie: danke, so ginge es natürlich auch, ich hätte es mir nur so gewünscht, das es fe in eine Deklaration hineinpasst..., unsymmetrische arrays gehen... zb: char* texte[] = {"kleinererText", "wesentlichgrößererText"};
und dann int anzahlTexteInTexte[/*fehlendes*/];

@fastjack: hab ich auch schon probiert, passen nur alle nicht auf mein problem...

danke an alle für eure hilfe (wusste aber leider alles schon.....)

lg


----------

