Array von Struct



  • Hi,

    ich möchte ein Array von meinem Struct mittels malloc/realloc erzeugen.
    Leider kann ich das Array nur beschreiben (wo auch immer ich hinschreibe)
    Beim lesen ist das Array leer. Warum ???

    typedef struct
    {
     int mpi_adr;
    char typ;
     int db_nr;
     int byte_nr;
     int datenlaenge;    /* in Worten */
     int var_laenge;     /* in Worten */
    } block;
    
    int main(int argc, char *argv[])
    {
    FILE* fp;
    int sst,i,z,x,y,blocknr;
    int akt_mpi = 0;
    int zwischenspeicher;
    char *lesen;
    char zeile[255];
    char ausgabebuffer[512][10];
    block *blockkennung;
    
          while (1)
                  {
                   if ((fp = fopen("/home/user/projekte/visual_sst/visual_sst/parameter", "r")) == NULL)
                       {
                       /* ERROR */ ;
                       printf ("parameter-Datei konnte zum lesen für die Schnittstelle nicht geöffnet werden");
                       return -1;
                       }
    
                        blocknr = 0;      /* zeilenzähler aus der parameterdatei */
                        /* File komplett einlesen */
    
                        while ( fgets(zeile, sizeof(zeile), fp) )
                              {
                              if (zeile[0] == '#' || strlen(zeile) == 0)
                                 {
                                 continue;
                                 }
    
                                  if (blockkennung == NULL || blocknr <= 0)
                                     {
                                      blockkennung = malloc(sizeof(block));
    
                                      sscanf (zeile , "%i , %c , %i , %i , %i , %i" , &blockkennung[0].mpi_adr ,
                                                                                      &blockkennung[0].typ,
                                                                                      &blockkennung[0].db_nr,
                                                                                      &blockkennung[0].byte_nr,
                                                                                      &blockkennung[0].datenlaenge,
                                                                                      &blockkennung[0].var_laenge
                                                                                      );
                                      blocknr++;
                                     }
                                  else
                                     {
                                      blockkennung = realloc(blockkennung , ((blocknr + 1) * sizeof(block)));
                                      sscanf (zeile , "%i , %c , %i , %i , %i , %i" , &blockkennung[blocknr].mpi_adr ,
                                                                                      &blockkennung[blocknr].typ,
                                                                                      &blockkennung[blocknr].db_nr,
                                                                                      &blockkennung[blocknr].byte_nr,
                                                                                      &blockkennung[blocknr].datenlaenge,
                                                                                      &blockkennung[blocknr].var_laenge
                                                                                      );
                                      blocknr++;
                                     }
    
                               }
                         fclose (fp);
    
    /*--------------------------------------------------------------------------------------------*/
    /* jeweiligen Block vorbereiten zum lesen */
    
                for ( i = 0 ; i < blocknr ; i++)
                    {
                    if (blockkennung[blocknr].typ == 'D')
                       {
                        fetchkopf.db_nummer = blockkennung[blocknr].db_nr;
                        }
                     else
                        {
                         fetchkopf.db_nummer = 0;
                        }
    
             }
    

    Danke
    worst_case

    [ Dieser Beitrag wurde am 03.07.2003 um 13:48 Uhr von worst_case editiert. ]

    [ Dieser Beitrag wurde am 03.07.2003 um 13:49 Uhr von worst_case editiert. ]

    [ Dieser Beitrag wurde am 03.07.2003 um 13:51 Uhr von worst_case editiert. ]



  • Wie sieht denn deine Datei aus??

    Du kannst übrigens anstatt "&blockkennung[0]." auch einfach "blockkennung." schreiben.



  • Hi,

    habe den Fehler gefunden.

    Es muss heissen blockkennung[i].typ und nicht blockkennung[blocknr].typ.
    Dies muss ich im nachfolgenden Programm noch überprüfen.

    Danke
    worst_case


Anmelden zum Antworten