2017-12-30 35 views
-3

Ich versuche, mein Array von Strukturen zu bekommen, um alle itemnumber Elemente zu drucken, die darin gespeichert sind. Allerdings kann ich die Länge des Arrays (Anzahl der Elemente im Array) nicht im Voraus wissen. Ich habe versucht, sizeof/sizeof(arr[0]) zu verwenden, aber es funktioniert nicht. Schätzen Sie jede Hilfe, wie dies getan werden kann, so dass ich alle Werte der itemnumbers in meinem Struct-Array drucken kann.C - Funktion zum Anzeigen von Werten eines Strukturarrays

Code: In meinem Haupt:

struct item beer[100]; // gets values from a text file 
Call to function: displayAll(beer); 

In meinem struct:

void displayAll(struct item beers[]) { 
int i; 
    for(i = 0; i < sizeof(beers); i++) { 
     printf("%d\n", beers[i].itemnumber); // Want it to print all of the values 
    } 
    } 
+0

debug was 'sizeof (Biere)' zurückgibt - Hinweis: es ist nicht, was Sie denken, es tut –

+0

Nun können Sie das nicht tun - weil Array, wenn übergeben, um in Zeiger zu zerfallen das erste Element. Sie werden also den Operator "sizeof" nicht auf das Array anwenden, sondern auf den verfallenen Zeiger, was zu einem falschen Ergebnis führt. – coderredoc

Antwort

0

Sie die Größe des Array als Parameter funktionieren sonst die Funktion hat keine Art und Weise zu übergeben müssen kenne die "Größe" des Arrays, so dass die Funktion sollte

void displayAll(struct item beers[],int size) { 
    int i; 
    for(i = 0; i < size; i++) { 
     printf("%d\n", beers[i].itemnumber); // Want it to print all of the values 
    } 
} 

haben Sie auch ein Problem des Pufferüberlaufs wenn Sie nicht c-Arrays korrekt in Funktionen verwenden

+0

Das funktioniert, wenn ich den Aufruf der Funktion über displayAll (Bier, Größe (Bier)/Größe (Bier [0])); Allerdings druckt es viele Werte aus meinem Array, die leer sind:/ – Furiousfuzzy

+0

Die Größe der Weg ist der richtige Weg, wenn Sie mit Arrays nicht als Parameter erhalten haben. Ein Array, das als Parameter an eine Funktion gesendet wird, wird als Zeiger behandelt, sodass sizeof die Größe des Zeigers anstelle der des Arrays zurückgibt. Quelle: https: //stackoverflow.com/questions/37538/how-do-i-de-termine-the-size-of-my-array-in-c – kapil

+0

Gelöst es, danke Jungs manchmal brauchen Sie nur ein wenig drücken, auch wenn Du bist auf dem richtigen Weg – Furiousfuzzy

Verwandte Themen