Zugriff auf Daten einer Struktur einer Struktur ?
-
Hi,
folgende Definitionen sind vorhanden
typedef unsigned short prWChar;
typedef unsigned long prUInt32;
.
.
.typedef struct{
prWChar InternalName[512];
prWChar ModelName[32];
} prInfo;typedef struct{
prUInt32 NumList;
prInfo DevInfo[prANY];
} prList;Ich habe also eine Struktur 'prList', die aus einer Zahl und entsprechenden Anzahl von Unterstrukturen besteht. Nun will ich also 'ModelName' ermitteln
Also:
prList myList;
memset(&myList,0,sizeof(prList);
FKT_GetList(&myList);
mittels 'myList.Numlist' habe ich den Wert für den ersten Strukturteil, aber wie komme ich dann an ModelName ?
die naheliegende Annahme 'myList.DevInfo.ModelName' funktioniert ja so nicht
Wer kann mir da mal auf die Sprünge helfen ????
Gruß
Martin
-
Validium schrieb:
...die naheliegende Annahme 'myList.DevInfo.ModelName' funktioniert ja so nicht ...
Du hast in Deinem prList ja auch kein prInfo, sondern ein Array von prInfo !
Du musst also schon sagen, auf welches Element dieses Arrays Du zugreifen willst.BTW1: Codetags machen allen die Arbeit leichter
typedef unsigned short prWChar; typedef unsigned long prUInt32; . . . typedef struct{ prWChar InternalName[512]; prWChar ModelName[32]; } prInfo; typedef struct{ prUInt32 NumList; prInfo DevInfo[prANY]; } prList; myList.DevInfo[0].ModelNameBTW2: Das ist zwar schönes ANSI-C, was Du da schreibst, aber wirklich kein C++ ..

Gruß,
Simon2.
-
Simon2 schrieb:
Validium schrieb:
...die naheliegende Annahme 'myList.DevInfo.ModelName' funktioniert ja so nicht ...
Warum nicht ?

... weil error C2228: Der linke Teil von 'ModelName' muss eine Klasse/Struktur/Union sein ...
BTW: Das ist zwar schönes ANSI-C, was Du da schreibst, aber wirklich kein C++ ..

ok - ob ANIS oder ++ ... iss mir grad mal wurscht .. ich hab da nich so den Durchblick. :-))
Gruß
Martin
-
Validium schrieb:
Simon2 schrieb:
Validium schrieb:
...die naheliegende Annahme 'myList.DevInfo.ModelName' funktioniert ja so nicht ...
Warum nicht ?

... weil error C2228: Der linke Teil von 'ModelName' muss eine Klasse/Struktur/Union sein ...
Schau an ! Sagt ja genau das aus, was ich oben vermutet habe: Du hast keine Klasse/Struct/Union, sondern ein Array davon.
Validium schrieb:
ok - ob ANIS oder ++ ... iss mir grad mal wurscht .. ich hab da nich so den Durchblick. :-))
Wäre jetzt ein guter Zeitpunkt, das zu ändern.

Gruß,
Simon2.
-
erstmal thx, ich habs verstanden ... Kein Zeiger auf Struktur, sondern ein Array mit entsprechend vielen Strukturen , zum Zugreifen also per [n] .. ok.
es liegen also im Speicher dann folgende Daten hintereinander (mal angenommen, es gibt zweimal devinfo):
- Numlist
- InternalName(1)
- ModelName(1)
- InternalName(2)
- ModelName(2)So richtig ??
Wäre jetzt ein guter Zeitpunkt, das zu ändern.

ähmmm ... geht das denn so fix, wenn man nur rudimentäre Kenntnisse über die Sprache allgemein hat ?

Gruß
MartinPS: ich hab das grad mal probiert, bevor ich diese Antwort abschicke ...
also ne MessageBox mit 'myList.DevInfo[1].ModelName' anzuzeigen ... da erzählt der mir was von Konvertierung von unsigned short[32] nach char* iss nich. ???? Warum denn das nu wieder ... ich glaub, ich geh doch erst mal in die Anfängerklasse von C ... irgendwie klemmt das noch mit den char und * und & und ...... boah ... echt anstrengend, dieses C
-
Dein aktueller Fehler liegt in der Definition
typedef unsigned short prWChar;.
Offensichtlich ist prWChar nicht dafür ausgelegt, "Lesbares" aufzunehmen...("unsigned short" ist Abkürzung für "unsigned short int" und integers sind nunmal dazu da, um Zahlen abzulegen).
Für Namen sind char/wchars bzw. string/wstring gedacht und besser geeignet.Validium schrieb:
...
es liegen also im Speicher dann folgende Daten hintereinander (mal angenommen, es gibt zweimal devinfo):- Numlist
- InternalName(1)
- ModelName(1)
- InternalName(2)
- ModelName(2)So richtig ??
Japp !
Validium schrieb:
...
ähmmm ... geht das denn so fix, wenn man nur rudimentäre Kenntnisse über die Sprache allgemein hat ?
Fix geht nix, was Wert hat, aber es lohnt sich. Nach meiner Erfahrung muss man sich bei ANSI-C mehr mit "Technik" rumschlagen, während C++ von sich aus schon ein wenig mehr mitbringt, was einem das abnimmt (z.B. das ganze char*-Gedöns mit festen oder variablen Größen braucht's nicht mehr)....
Gruß,
Simon2.
-
... ("unsigned short" ist Abkürzung für "unsigned short int" und integers sind nunmal dazu da, um Zahlen abzulegen).
- also ist dieses ominöse 'ModelName' keine Zeichenkette, sondern wieder ein Array aus 32 Integer-Werten ? Dann muss ich mich mal darum kümmern, diese auszulesen.
Japp !
hurra !!! mit diesem Erfolgserlebnis am heutigen Arbeitstag kann ich doch beruhigt hoam gehn *gggg
Fix geht nix, was Wert hat, aber es lohnt sich.
Das iss ja scho mal prima was fürn Footer hier ...

In dem Zusammenhang noch mal eine Frage nach deiner Meinung: Sollte ich mit meinen - so allgemeinen Kenntnissen von C - erstmal bei C++ in die Schule gehen oder sollte ich gleich mit C# einsteigen ? Ist C# quasi die 'Fortsetzung' oder ist das ganz was eigenes ?
Gruß
Martin
-
Validium schrieb:
... ("unsigned short" ist Abkürzung für "unsigned short int" und integers sind nunmal dazu da, um Zahlen abzulegen).
- also ist dieses ominöse 'ModelName' keine Zeichenkette, sondern wieder ein Array aus 32 Integer-Werten ? Dann muss ich mich mal darum kümmern, diese auszulesen.
Genau !
Besser: Definiere Dein struct anders ... wenn da nämlich ein Name rein soll, passt das einfach nicht zusammen.Validium schrieb:
... hurra !!! mit diesem Erfolgserlebnis am heutigen Arbeitstag kann ich doch beruhigt hoam gehn *gggg
Glückwunsch !!

Validium schrieb:
... In dem Zusammenhang noch mal eine Frage nach deiner Meinung: Sollte ich mit meinen - so allgemeinen Kenntnissen von C - erstmal bei C++ in die Schule gehen oder sollte ich gleich mit C# einsteigen ? Ist C# quasi die 'Fortsetzung' oder ist das ganz was eigenes ? ...
Ich kenne einfach C# nicht - aber dazu gibt es hier im Forum (vA "Rund um die Programmierung") schon einige längere Diskussionen zu, die Du mal durchfräsen solltest. Ich persönlich schätze an C++ die "Allgemeingültigkeit" ... Du hast einen Sprachstandard, mit dem man Programme schreiben kann, die eigentlich überall laufen. Mit C# ist man IIRC da festgelegter - dafür ist es für bestimmte Aufgaben komfortabler (bringt mehr "Infrastrukturzeug" mit).
Gruß,
Simon2.
-
das mit der Umdefinierung iss ja gut gemeint, geht aber nicht, da mir diese Strukturen vorgegeben sind, ich darf sie nur benutzen, aber das macht nix, ich weiß ja nun, was sich dahinter eigentlich verbirgt.
Simon2 schrieb:
Ich kenne einfach C# nicht - aber dazu gibt es hier im Forum (vA "Rund um die Programmierung") schon einige längere Diskussionen zu, die Du mal durchfräsen solltest. Ich persönlich schätze an C++ die "Allgemeingültigkeit" ... Du hast einen Sprachstandard, mit dem man Programme schreiben kann, die eigentlich überall laufen. Mit C# ist man IIRC da festgelegter - dafür ist es für bestimmte Aufgaben komfortabler (bringt mehr "Infrastrukturzeug" mit).
ok ... dann such ich mal weiter ... (hab grad eben erst mitgekriegt, dass dieses Forum ja nur ein Unterforum iss ... ooups ... da schau ich mich doch gleich mal eine Etage höher noch um ... )
Dir erstmal ein großes Dankeschön für deine superschnellen und für mich sehr hilfreichen Antworten !!! Hast dir ein Bienchen verdient

Gruß
Martin
-
Validium schrieb:
...Hast dir ein Bienchen verdient...
*summ* *suuuuummmmmm*
*summ* *suuuuummmmmm*

Gruß,
Simon2.