Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strcut als Zeiger an Funktion übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.07.2003, 19:44 Uhr
~worst_case
Gast


Hi,
ich versuche verzweifelt diese Funktion zum laufen zu bekommen.
Ich übergebe einen Zeiger des Struct's reserviere in der Funktion neuen Speicher und will dann in der main die Daten ausgeben.
Ich möchte den Zeiger für das struct auch in anderen Funktionen nutzen, deshalb soll es so beibehalten werden.
Mein Problem ist.... ich bekomme keine Daten in der main., und weiß nicht warum.
Dazugesagt: Ist für meine Verhältnisse sehr schwierig !

C++:
typedef struct
{
int mpi_adr;
char typ;
int db_nr;
int byte_nr;
int datenlaenge;    
int var_laenge;     /* in Byte */
} block;

/*#############################################################################################################*/
int main(int argc, char *argv[])
{
int sst,y,x,blocknr, max_block;
char *lesen;
block *blockkennung;

/* Parameter-Datei einlesen */

        while (1)
              {
              max_block = 0;

              max_block = read_param(&blockkennung);

              if (max_block <= 0) exit (-1);


/*--------------------------------------------------------------------------------------------*/
/* jeweiligen Block vorbereiten zum lesen */

                for ( blocknr = 0 ; blocknr < max_block ; blocknr++)
                    {
                    printf ("%s", &blockkennung[blocknr].typ);
                    }

/*############################################################*/
int read_param(block **blockkennung)
{
FILE *fp;
char zeile[255];
int max_block;

    if ((fp = fopen(parafile, "r")) == NULL)
       {
       /* ERROR */ ;
       printf ("parameter-Datei konnte zum lesen für die Schnittstelle nicht geöffnet werden");
       return -1;
       }

       max_block = 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 || max_block <= 0)
                {
                 if ((*blockkennung = malloc(2 * sizeof(block))) == NULL)
                     {
                      printf ("Speicherfehler in der Funktion \"read_param\"");
                      return -1;
                     }

                 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
                                                                 );
                  max_block++;
                  }
               else
                  {
                  if ((*blockkennung = realloc(*blockkennung , (max_block + 1) * sizeof(block))) == NULL)
                       {
                        printf ("Speicherfehler in der Funktion \"read_param\"");
                        return -1;
                       }
  
                   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
                                                                   );
                    max_block++;
                    }

             }

        fclose (fp);

return max_block;
}


Danke
worst_case

Dieser Post wurde am 04.07.2003 um 19:51 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2003, 07:39 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
~worst_case postete


C++:
nt main(int argc, char *argv[])
{
[...]
                    printf ("%s", blockkennung[blocknr].typ); // Hier war IMHO das & zuviel!


Danke
worst_case


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: