Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » struct anzeigen

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
20.04.2004, 08:50 Uhr
lubU




C++:
typdef struct
{
char name1[100],name2[100],name3[100];
} names;

int main()
{
names gruppe;

printf("Name 1 eingeben: ");
fgets(gruppe.name1,100,stdin);
......

printf("%s", gruppe); // <-- so funktionierts nicht.

return 0;
}



ist es möglich ein struct komplett anzeigen zu lassen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.04.2004, 09:56 Uhr
lubU



printf("%s",&gruppe) zeigt das erste array des structs an "name1"

ist es auch möglich ein komplettes struct in eine datei zu schreiben ?

Dieser Post wurde am 20.04.2004 um 09:56 Uhr von lubU editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.04.2004, 10:00 Uhr
Pablo
Supertux
(Operator)


Nein.

Was du machen kannst ist die rohe Daten in deinen Struct anzeigen zu lassen, ob das was bringt, weiß ich nicht. bsp:


C++:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typdef struct
{
       char name1[100],name2[100],name3[100];
} names;

int main()
{
    names gruppe;
    char* rohedata;

    printf("Name 1 eingeben: ");
    fgets(gruppe.name1,100,stdin);
    ......

    rohedata=(char*)malloc(sizeof(names)+1);
    if (!rohedata) {
        fprintf(stderr, "Out of memeory\n");
        return 1;
    }

     memcpy(rohedata, &gruppe, sizeof(names));
     rohedata[sizeof(names)]=0;

     printf("%s\n", rohedata);

     free(rohedata);

    return 0;
}



Die Frage ist, ob das Sinn macht.


Bearbeitung von Pablo:


Zitat:

printf("%s",&gruppe) zeigt das erste array des structs an "name1"


Das passiert, da names nur char Arrays enthält.
printf("%s....", &gruppe); macht folgendes. printf gibt Zeichen für Zeichen den Inhalt des Arrays aus bis \0 gelesen wird.

gruppe sieht so aus (so kannst du dir graphisch vorstellen), [...] ist ein Speicherblock von Typ egal, nur ein Block.
gruppe==[[string1\0][string2\0][string3\0]]

Wenn du so ein Array in printf übergibst, dann ist s von string1\0 das erste was gelesen wird und ausgegeben. Dann macht die Funktion weiter und gint t aus, dann r aus, usw. bis das erste \0 vorkommt, dann glaubt printf, dass die Zeichenkette fertig ausgegeben wurde. printf weiß nicht, dass der Pointer &gruppe von Typ names ist, sondern sie behandelt die Daten in gruppe als wäre eine Zeichenkette aufgrund des "%s" im Format-String von printf. Deshalb wird es nur name1 ausgegeben, aber das ist Zufall.


Zitat:

ist es auch möglich ein komplettes struct in eine datei zu schreiben ?


Ja, das ist es. Mit dem selben Trick wie oben.

C++:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typdef struct
{
       char name1[100],name2[100],name3[100];
} names;

int main()
{
    names gruppe;
    void* rohedata;
    FILE* f;

    printf("Name 1 eingeben: ");
    fgets(gruppe.name1,100,stdin);
    ......

    f = fopen("dateiname", "wb");
    if (!f) {
         fprintf(stderr, "Datei kann nicht geöffnet werden\n");
         return 1;
    }

    rohedata=malloc(sizeof(names));
    if (!rohedata) {
        fprintf(stderr, "Out of memeory\n");
        return 1;
    }

    memcpy(rohedata, &gruppe, sizeof(names));
    fwrites(rohedata, sizeof(names), 1, f);

    free(rohedata);
    fclose(f);
    return 0;
}






Mehr zum Thema "Speicherung von structs": www.fun-soft.de/showtopic.php?threadid=6820&time=1082448933
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 20.04.2004 um 10:16 Uhr von Pablo editiert.
 
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: