Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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 < [ 2 ]
000
10.06.2004, 14:55 Uhr
~ruuuudi
Gast


warum funktioniert es nicht wenn ich so ein struct definiere und das dann versuche zu füllen

C++:
struct LINE
{
    char numb;
    char name;
    char par;
    char wert;
} ;

...

LINE angaben;

...

strcpy( LINE.numb , "2345677")



müsste doch eigentlich klappen, oder???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.06.2004, 15:46 Uhr
stephanw
localhorst


1. ist LINE.numb Käse, wenn dann angaben.numb
2. Nein. Du schreibst 7 Zeichen (+ abschließendes 0-Byte) an die Stellen angaben.numb . Dort ist aber nur für 1 Zeichen Platz, dass heißt Du überschreibst das, was im Speicher dahinter liegt --> Bumm! Entweder Du deklarierst numb als Array fester Größer und achtest beim Schreiben darauf, diese nicht zu überschreiten, oder Du musst numb als Pointer char* deklarieren, dem Du dynamisch Speicher in geeigneter Menge zuweisen musst.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.06.2004, 23:29 Uhr
0xdeadbeef
Gott
(Operator)


Noch schlechter - angaben.numb würde als Speicheradresse irgendwo nahe NULL interpretiert und strcpy(angaben.numb, "2345677") würde dann versuchen, "2345677" (also 8 Zeichen - sentinel nicht vergessen) da hin zu schreiben, und ziemlich sicher nen segfault auslösen.

Was du willst, ist eher sowas in der Art:

C++:
#define MAX_LEN 100

struct LINE
{
    char numb[MAX_LEN];
    char name[MAX_LEN];
    char par[MAX_LEN];
    char wert[MAX_LEN];
} ;

...

LINE angaben;

...

strcpy(angaben.numb , "2345677")


Dabei wird

C++:
char numb[MAX_LEN];


Vom Präprozessor durch

C++:
char numb[100];


ersetzt, und das deklariert ein 100 Zeichen langes char-Array, also einen string.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 10.06.2004 um 23:30 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.06.2004, 08:51 Uhr
stephanw
localhorst


@0xdeadbeef:
Ok, hab vergessen darauf hinzuweisen, dass er strcpy( & angaben.numb, "2345677") hätte schreiben sollen, was immer noch nicht ginge. Der Rest stimmt aber
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.06.2004, 10:02 Uhr
~Ruuuuudi
Gast



Zitat:
stephanw postete
@0xdeadbeef:
Ok, hab vergessen darauf hinzuweisen, dass er strcpy( & angaben.numb, "2345677") hätte schreiben sollen, was immer noch nicht ginge. Der Rest stimmt aber


Wenn ich hier noch mit dem Adressoperator arbeite, dann funzt es gar nicht mehr. Ohne ihn lässt sich der Code zwar compilieren, aber nicht ausführen --> dicker speicherfehler... muss ich irgendwo noch was allokieren? Mit malloc oder realloc? Wo?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.06.2004, 11:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zeig mal code...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.06.2004, 11:36 Uhr
~mike
Gast


Hi!
Also bei einem char Feld brauchst du keinen Adressoperator. char numb[100]; ist schon allokiert (oder wie das heißt *g*). malloc und realloc brauchst du nur, wenn zur Kompilierzeit die Größe des Feldes nicht bekannt ist.
Also bei mir funtzt der obige code:

C++:
#include <stdio.h>
#define MAX_LEN 100

struct LINE
{
    char numb[MAX_LEN];
    char name[MAX_LEN];
    char par[MAX_LEN];
    char wert[MAX_LEN];
} angaben;

int main(void)
{
   strcpy(angaben.numb, "2345677");
   printf("%s\n",angaben.numb);
   return 0;
}



mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.06.2004, 12:02 Uhr
~ruuuuudi
Gast



Zitat:
~mike postete

C++:
...
   printf("%s\n",angaben.numb);
   return 0;
}



mfg



sorry, funzt bei mir auch mit dem Code. Kann ich auch anschließend die ganze
Struktur auf einmal ausgeben? z.B. zeilenweise immer die angaben.numb, angaben.name, angaben.param, angaben.wert ausgeben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.06.2004, 12:20 Uhr
mike
Pinguinhüpfer
(Operator)


Hmm. Da gibts imho nix spezielles:

C++:
#include <stdio.h>
#define MAX_LEN 100

struct LINE
{
    char numb[MAX_LEN];
    char name[MAX_LEN];
    char par[MAX_LEN];
    char wert[MAX_LEN];
} angaben;

void printstruct(struct LINE *);

int main(void)
{
   strcpy(angaben.numb, "struct 1");
   strcpy(angaben.name, "struct 2");
   strcpy(angaben.par, "struct 3");
   strcpy(angaben.wert, "struct 4");

   printstruct(&angaben);

   return 0;
}

void printstruct(struct LINE *sline)
{
   printf("%s %s %s %s\n", sline->numb,
   sline->name, sline->par, sline->wert);
}


--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.06.2004, 13:15 Uhr
~ruuuuudi
Gast


klappt so weit super. aber ist es auch möglich, evtl. nur eine oder zwei zeilen auszugeben? Meinetwegen die 7. und die 16. Zeile sollen ausgegeben werden. Wie kann ich jetzt die einzelnen zeilen ansprechen?
so?
C++:
angaben[7].wert //oder wie

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: