Hilfe zu struct
-
Hallo Zusammnen,
vielleicht kann mir jemand helfen?Ich habe in einer Struktur 2 Int Variablen und ein Int Array definiert. Ich kann die beiden Int Variablen und das Int Array[0] ausgeben.
Ich schaffe es aber nicht die weiteren Inhalte des Arrays auzugeben. Ich weiß nicht wie man darauf zugreift.
Hier mein Code.#include<stddef.h> #include<stdio.h> struct Can { int CanID; int CanLen; int CanData1[8]; //int CanData2; }; int main(void) { struct Can msg1={0x100, 0x01, 0x11, 0x66}; struct Can msg2={200, 2, 22}; struct Can msg3={300, 3, 44}; struct Can msg4={400, 4, 55}; struct Can* data[]={ &msg1, &msg2, &msg3, &msg4}; //size_t data_count = sizeof(data); //size_t data_count2 = sizeof(*data); data_count = sizeof(data) / sizeof(*data); printf("Adresse CanData1: %d , Adresse CanData2 :%d\n", &msg1.CanData1[0], &msg1.CanData1[1]); for( size_t i=0; i<data_count; i++ ) { printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x\n", data[i]->CanID, data[i]->CanLen, *data[i]->CanData1); //printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x, CanData 2: 0x%x\n", data[i]->CanID, data[i]->CanLen, data[i]->CanData1, data[i]->CanData2); } return 0; }
Ein weiter Frage wäre ob man in CodeBlocks das Cosolenfenster so einstellen kann, dass es bei mhreren Bildschirmen nicht immer hinter dem Codefenster verschwindet?
Viele Grüße
Michael
-
@mj1234 sagte in Hilfe zu struct:
> //printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x, CanData 2: 0x%x\n", data[i]->CanID, data[i]->CanLen, data[i]->CanData1, data[i]->CanData2);
CanData2 gibt es doch gar nicht!
Es gibt CanData1[0], CanData1[1] usw.
-
Die Zeile ist doch auskommentiert.
Die diente nur für meine Tests.
-
Dann weiß ich nicht, was Du willst ... was genau geht denn nicht?
Zeig mal den Code, den Du haben möchtest, und warum der nicht geht (Fehlermeldungen vom Compiler).
@mj1234 sagte in Hilfe zu struct:
Ich habe in einer Struktur 2 Int Variablen und ein Int Array definiert. Ich kann die beiden Int Variablen und das Int Array[0] ausgeben.
Ich schaffe es aber nicht die weiteren Inhalte des Arrays auzugeben.Dein struct hat keine weiteren Elemente (außer CanData1[1] bis CanData1[7]), was also willst Du?
-
Alles wichtige als Kommentar im Programm.
Das was Du hier nutzt ist C und kein C++. Das nächste Mal bitte in die richtige Kategorie posten.#include<stddef.h> #include<stdio.h> #include<stdlib.h> // Das ist ein C Programm, weshalb in der Rubrik C++? #define SIZE_CAN_DATA 8 struct Can { int CanID; int CanLen; int CanData1[SIZE_CAN_DATA]; }; int main(void) { // Hier werden nicht alle Felder von Can initialisiert. // Dazu werde eine falsche Initialisierung für das Feld CanData1 gewählt. struct Can msg1={0x100, 0x01, {0x11, 0x66}}; struct Can msg2={200, 2, {22}}; struct Can msg3={300, 3, {44}}; struct Can msg4={400, 4, {55}}; struct Can* data[] = {&msg1, &msg2, &msg3, &msg4}; // Datentyp für data_count fehlte size_t data_count = sizeof(data) / sizeof(*data); // hier sollen Zeiger ausgegeben werden // Daher die richtigen Formate wählen, und den Cast auf (void*) durchführen. printf("Adresse CanData1: %p , Adresse CanData2 :%p\n", (void*)&msg1.CanData1[0], (void*)&msg1.CanData1[1]); for (size_t i = 0; i < data_count; i++) { printf("CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x", data[i]->CanID, data[i]->CanLen, *data[i]->CanData1); for (size_t j = 0; j < SIZE_CAN_DATA; ++j) { printf("CanData1[%zu]: 0x%x,", j, data[i]->CanData1[j]); } printf ("\n"); } return EXIT_SUCCESS; }
-
Hallo John,
danke für die Hilfe. Genau das habe ich gesucht.Viele Grüße
Michael