Tach! Habe folgendes Problem: Ich möchte wissen wie groß das Element data der Struktur ist, welches ein array ist: typedef struct { unsigned char width; unsigned char height; unsigned char data[]; } t_bitmap; t_bitmap testmap PROGMEM = { 10, 16, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 8, 16, 32, 64, 128, 8, 9, 10 } }; sizeof(testmap.data) bringt die fehlermeldung "main.c:57: error: invalid application of `sizeof' to an incomplete type" sizeof(testmap.height) geht dagegen. Am Progmem liegts nicht, ohne progmem gibts den gleichen fehler. Weiß jemand Rat ? MfG Stefan
Du hast durch die Deklaration als »[]« halt einen unvollständigen Typen definiert, von dem kannst Du kein `sizeof' bestimmen, da der Typ selbst dadurch eine undefinierte Größe hat. Eine definierte Größe (und damit überhaupt erstmal benutzbar) bekommt der Typ erst durch die Instanzierung (also durch eine initialisierte Variable -- Du kannst von diesem Typen auch keine nichtinitialisierten Variablen benutzen). Von einer solchen Instanz kannst Du dann auch `sizeof' bestimmen, also »sizeof(testmap)« sollte sehr wohl funktionieren. Wenn Du genau drüber nachdenkst, welche Information der Compiler zur Compilezeit von Deinem Code überhaupt besitzt, sollte das auch alles sehr logisch sein.
So geht das nicht! unsigned char data[]; Ist kein array, sondern ein Pointer auf ein array. Du könntest genausogut: unsigned char *data; schreiben. Du musst dann zur Laufzeit genügend Speicher für Dein array reservieren und die Adresse des Pointers "updaten".
Alles klar, habe glaub ich verstanden... SizeOf wird praktisch direkt vom Compiler "gewandelt". Naja, dann fällt mir nur noch ein von SizeOf(testmap) die 2 Bytes für die anderen beiden Felder abzuziehen, dann hab ich ja die größe des data feldes... Vielen Dank für die Tips !! MfG Stefan
...dann erhälst Du die größe des Pointers, denke ich. Nicht die des Datenfeldes... Und immer dran denken: C ist case-sensitive, soll heissen SizeOf != sizeof!
Hi Stefan, wenn du sizeof benutzt, bekommst du die Größe des Datentyps geliefert. Wenn du die Länge eines Strings wissen möchtest, d.h. die Anzahl der Zeichen bis zur '\0'-Terminierung, kannst du mit strlen arbeiten. Die Größe deines Arrays sollte nicht dynamisch sein, da dein Programm sonst nicht mehr den aktuellen Standards entspricht und je nach verwendetem Compiler nicht mehr übersetzt werden kann. Also, entweder "char* data" in die Struktur und später auf ein Element eines Arrays deiner Wahl zeigen lassen, oder "char data[Größe]" benutzen. Viele Grüße Rolf PS: Ich kann nicht erkennen, was dein Programm können soll, aber wenn du nur ganze Zahlen speichern möchtest, wäre "int data[Größe]" vielleicht besser!?
Ich vermute, daß Du Windows benutzt!? Evtl. hilft Dir ja der Anhang weiter, Du benötigst nur einen gcc, der auf Windows lauffähig ist (MinGW oder Cygwin). Falls Du irgend ein Unix/Linux verwenden solltest, dann nenn das Outputfile einfach nicht .exe... :) Viel Spaß beim rumspielen...
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.