Lösung für "dereferenzieren" void * "- Zeiger" - Warnung in struct in C?

Ich habe versucht, erstellen Sie eine pseudo-super-struct drucken array von structs. Mein basic
Strukturen sind wie folgt.

/* Type 10 Count */
typedef struct _T10CNT
{
    int _cnt[20];
} T10CNT;

...

/* Type 20 Count */
typedef struct _T20CNT
{
    long _cnt[20];
} T20CNT;
...

Habe ich die unten struct drucken Sie das array von oben genannten Strukturen. Ich habe dereferenzieren void-Zeiger Fehler beim kompilieren des folgenden code-snippet.

typedef struct _CMNCNT
{
    long  _cnt[3];
} CMNCNT;

static int printCommonStatistics(void *cmncntin, int cmncnt_nelem, int cmncnt_elmsize)
{
    int ii;
    for(ii=0; ii<cmncnt_nelem; ii++)
    {
        CMNCNT *cmncnt = (CMNCNT *)&cmncntin[ii*cmncnt_elmsize];
        fprintf(stout,"STATISTICS_INP: %d\n",cmncnt->_cnt[0]);
        fprintf(stout,"STATISTICS_OUT: %d\n",cmncnt->_cnt[1]); 
        fprintf(stout,"STATISTICS_ERR: %d\n",cmncnt->_cnt[2]);
    }
    return SUCCESS;
}

T10CNT struct_array[10];
...
printCommonStatistics(struct_array, NELEM(struct_array), sizeof(struct_array[0]);
...

Meine Absicht ist es, eine gemeinsame Funktion drucken Sie alle arrays. Bitte lassen Sie mich wissen, den richtigen Weg, es zu benutzen.

Dankbar für die Hilfe im Voraus.

Edit: Der name des Parameters wird geändert, um cmncntin von cmncnt. Sorry, es war Tippfehler Fehler.

Dank,
Mathew Liju

Man sollte Sie nur verwenden, Gewerkschaften, wäre es viel einfacher: typedef union { long cnt_long; int cnt_int; } CNT; CNT zählt[20];
Erklären Sie bitte, was meinen Sie mit super Struktur und überprüfen Sie die Beispiel-code, den Sie geschrieben haben. Meinst du das wirklich: typedef struct _T10CNT { int _cnt[20]; }
Super Struktur ist die Struktur, die auf ähnliche Strukturen mit ähnlichen Datentypen. Im obigen Beispiel TL10CNT, TL20CNT sind ähnliche Typen. Meine Absicht ist, für den Druck die Struktur, die ich brauche, um zu schreiben-Funktionen für jede Struktur. Stattdessen kann ich verwenden Sie ein einzelnes struct-pointer um die Daten zu erhalten.
Symbol Namen beginnen mit"_", gefolgt von einem Großbuchstaben vorbehalten sind, durch die Implementierung von C/C++ - standard-Bibliotheken. Sollten Sie wirklich ändern Sie Ihre Namenskonvention.
Vielleicht solltest du uns sagen, was Sie versuchen zu tun? Es ist unmöglich, zu versuchen, zu drucken, aus jedem struct in C. Das ist nicht C++

InformationsquelleAutor Liju Mathew | 2008-11-14

Schreibe einen Kommentar