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

OP #1413084
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
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
Gast
>Gibt es hier auch eine elegantere Lösung?

Nö. Entwder direkt bei der Registrierung mitzählen, oder hinterher, wie 
du es im Beispiel gezeigt hast. Anders geht es nicht.

Oliver
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.