Größe bestimmen
-
Hi Leute!
Ich möchte innerhalb einer Funktion die Größe eines übergebenen Arrays bestimmen. So wie in diesem Code:
#include<stdlib.h> void size(int gZ[]) { int a = sizeof(gZ)/sizeof(int); } int main() { int gZ[6] = {1,2,3,4,5,6}; size(gZ); return 0; }
Es sind 6 Elemente in gZ aber in a steht dann nur eine 1. Warum funktioniert das so nicht? Und wie kann ich das Programm umschreiben, dass ich die korrekte Anzahl in a stehen bekomme?
-
Bei der Übergabe an eine Funktion zerfällt das Array in einen Pointer auf sein erstes Element. Du berechnest mit sizeof(gZ) also die Größe eines Pointers. Die ist aber immer gleich (bei die anscheinend genau so groß wie sizeof(int) ). Eine Lösung ist, die Anzahl der Elemente als Parameter mit zu übergeben.
-
Hm, genau das hab ich mir ehrlicherweise schon gedacht. Aber gibt es denn keine andere Möglichkeit, außer die, den Anzahl/Größe per int-Var. zu übergeben? Mit C ist doch sonst auch alles machbar...
-
vip@r schrieb:
Aber gibt es denn keine andere Möglichkeit, außer die, den Anzahl/Größe per int-Var. zu übergeben?
Nein.
Mit C ist doch sonst auch alles machbar...
Machbar ist es ja auch, eben per Übergabe. Was du willst ist die Anzahl auf dem Silbertablett präsentiert zu bekommen, und *das* gibt es in C nunmal generell nicht.
-
Außer man fügt eine spezielle Endmarkierung ein (bei Strings zb '\0'), dann kann man nachher herausfinden, wo das Array zuende ist.
-
pyhax schrieb:
Außer man fügt eine spezielle Endmarkierung ein (bei Strings zb '\0'), dann kann man nachher herausfinden, wo das Array zuende ist.
Damit kannst du rausfinden wo der Text zuende ist. Das Array kann größer sein.
char gruss[200] = "HAllo Welt!";
-
Unglücklich, aber denkbar wäre dann die Lösung mit globalen Variablen. Entweder eine Integer-Variable, die vorher mit der entsprechenden Arraygröße befüllt wird und diese beim Funktionsaufruf dann bereits beinhaltet oder gleich voll ins Klo greifen und das Array global definieren. Dann kannst Du innerhalb des Programms damit anstellen (lassen), was Du möchtest (oder auch nicht).
-
Nimm einen zweiten Parameter vom Typ
size_t
Schau dir mal strncpy an.
oder snprintf oder ...
-
Also
size = sizeof(gZ) / sizeof(gZ[0])
oder sizeof(int)
gibt dir in main plaziert schon die Größe des Arrays zurück.
Versuchts Du dies in einer Funktion zu kapseln, greift das was pyhax beschrieben hat.