Berechnung " Wieviel Datensätze sind in einer Struktur gespeichert"

OP #1413084
Lesenswert?

Hallo,

wie schon im Betreff geschrieben möchte ich gerne berechnen wieviele 
Datensätze in der Struktur gespeichert sind.
Ich habe eine Struktur die so aussieht
1
typedef uint8_t ExecuteDataFnct (uint8_t, uint8_t, uint8_t)
2

3
struct Daten {
4
     uint8_t adresse;
5
     uint8_t currentState;
6
     uint8_t outputState;
7
     uint8_t data1;
8
     uint8_t data3;
9
     uint8_t data4;
10
     ExecuteDataFnct execute;
11
}
12

13
struct Daten AllDaten[10];
14
#define NR_ALLDATA (sizeof(AllData) / (sizeof(*AllData))

Nun möchte ich nach der Initialisierung die Anzahl der Datensätze 
berechnen.
Hat vielleich jemand einen Ansatz oder Idee?

Danke

Thomass
OP #1413360
Lesenswert?

Christian S. schrieb:
>
1
> #define NR_ALLDATA 10
2
> struct Daten AllDaten[NR_ALLDATA];
3
>
Hallo Christian.
auch diese Variante liefert nur die Größe der des Struct AllData.

In meinem Fall startet das Programm und registriert alle Slaves die sich 
im Bus befinden.
Dies kann einer sein oder maximal 10.
Nach dem scannen sind zB. 5 Slaves angeschlossen nun möchte ich die 
Anzahl gerne berechnen.
Ich habe es schon so probiert.
1
for(i=0;i<10;i++) {
2
     if(!(AllData[i].adresse)) {
3
          AnzahlDaten = i;
4
          break;
5
     }
6
}

Gibt es hier auch eine elegantere Lösung?

Thomas
#1413380
Lesenswert?

Ah ... Du hast ein array fester Größe, das Du aber nicht zwingend 
vollständig mit für Dich wichtigen Daten füllst, ja?

Dann bringen Dich Berechnungen mit sizeof nicht weiter, denn woher soll 
so eine Funktion wissen wie voll Dein array ist. Der Speicherplatz für 
10 Strukturen ist so oder so belegt, ob Du dann sinnvolle Daten 
reinpackst oder nicht spielt dann keine Rolle mehr.
Ich denke am sinnvollsten wäre es, noch eine Counter-Variable 
einzuführen in die direkt bei der Registrierung Deiner Slaves die 
gefundene Anzahl reingeschrieben wird, bzw ein Zähler bei jedem 
erkannten Slave um eins erhöht wird.

Wie Du es gemacht hast geht es natürlich auch, aber wieso Rechenzeit 
verschwenden um Werte auszurechnen, an die Du anders viel schneller und 
einfacher kommen kannst? Oder gibt es noch einen Grund warum eine 
Countervariable ausscheidet?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren