# Array Größe ermitteln, Nubi



## MPNuts (19. November 2004)

Hallo,

nun, ich habe folgendes Problem, 

ich übergebe einer Funktion einen Pointer auf ein Array. Nun habe ich aber das Problem, dass ich in der jetzigen Funktion auf den Index des Arrays zurückgreifen möchte. Der Index wird ja aber nicht mit übergeben, oder irre ich mich?
Da das letzte Zeichen nicht "\0" , sondern Unbekannt ist, kann ich es auch nicht durch Zählen ermitteln. Ich würde auch gerne vermeiden dieses oder ein anderes Zeichen anzufügen.
Ich habe es mit sizeof versucht, aber da bekomme ich die Größe des Pointers und nicht des Arrays.

Gibt es vieleicht eine Funktion die mir den Index zurückgibt?

Ich danke euch im voraus für eure Bemühungen.

mfg MPNuts


----------



## Beichtpfarrer (19. November 2004)

Nee... Ein Array weiss zur Laufzeit nicht, wie groß es ist.
Wenn du einen Zeiger auf einen std::vector übergibst, der weiß seine Größe.
Oder du übergibst in einem weiteren Parameter einfach die Größe des Arrays.


----------



## MPNuts (19. November 2004)

Danke für die Info, aber wie es immer ist, eine Antwort schürrt Stoff für weitere Fragen!

Naja, das Problem ist, ich kann den Index nicht mitübergeben, da der Pointer als Rückgabewert dient, und da geht ja nur einer.
Was soll "std::vector" bedeuten? Ist das ein Vektor? Ist das gleich einem 2 Dimensionalen Array?


----------



## Beichtpfarrer (19. November 2004)

MPNuts hat gesagt.:
			
		

> Naja, das Problem ist, ich kann den Index nicht mitübergeben, da der Pointer als Rückgabewert dient,....


Meinst du, du hast folgende Programmstruktur beim Aufruf der Funktion:

```
void MacheWasMitDemArray(char*array){
 //mache was, wofür man die Länge des Arrays benötigt
}

char* ErstelleEinArray(){
 return new char[rand()%60];
}

int main(){
 MacheWasMitDemArray(ErstelleEinArray());
}
```

Für den Fall kann ich dir nicht helfen.
Dazu kann ich nur anmerken, das es imho kein guter Stil ist, einer aufrufenden Funktion einen Zeiger auf ein Array zurückzugeben, wenn sie nicht weiß, wie lange das Array ist, höchstens es ist ein \0-terminierter String.

Wenn die aufrufende Funktion aber weiss, wie lange das Array ist, dann kann sie diesen Wert ja auch der MacheWasMitDemArray-Funktion übergeben.

Ansonsten kann man noch in Erwägung ziehen ein std:air<void*,int> zurückzugeben, wobei das erste Element der Zeiger auf dein Array ist, der zweite die Array-länge.

std::vector ist eine Klasse aus der STL (Standart-Template-Library). Sie stellt im Prinzip ein dynamisches eindimensionales Array dar.


----------



## MPNuts (19. November 2004)

Danke, ich werde es mir merken. Mit dem schlechten Stil meine ich.

Naja, darum werde ich mich nächste Woche mal kümmern. Mit Klassen hatte ich bisher noch nichts zu tun, daher denke ich, dass ich das nicht so schnell nutzen kann. 
Da mein Programm bis Montag laufen muss und ich noch die Doku zu schreiben habe, habe ich es mit einem ganz miesen Stil gelöst! 
-Globale Variable!
Trotzdem danke für den Tipp, werde ich in meiner nächsten Aufgabe nutzen.


----------



## MPNuts (26. November 2004)

Falls jemand das Problem auch hat,

Ich habe es jetzt mit einem Struct gelöst.

struct array
{
char * ptr;
int index;
};
Das gibt einem die Möglichkeit den Struckt anstatt nur des Pointers zurückzugeben! Aber noch besser finde ich es mit Referenfen!


----------

