Struct Problem

slang

Grünschnabel
Servus,

ich habs normal eher so mit JAVA, von daher diese wahrscheinlich relativ simple Frage, Code folgt anschließend:

Ich bekommen in einer Funktion einen Pointer auf ein struct übergeben. Zu Beginn der Funktion hole ich mir das eigentliche struct und möchte nun anschließend auf die einzelnen struct Variablen zugreifen. Allerdings sind alle Variablen leer, was eigentlich nicht sein kann, da die Variablen im nächsten Schritt per SQL* in eine Oracle Datenbank geschrieben werden und diese offensichtlich auch dort ankommen. Ich vermute mal, dass ich irgendwie falsch auf das struct Zugreife.....

Code:
X_Tree function(
                        XDa_ClustId                           cId,
                        XDa_StructId                          sId,
                        struct meinStruct*                input,
                        X_Env                                 env)

{
    X_Tree root;

    /* Copy the key */
    vMeinStruct = *input;
    
    printf(" Kommentar: %c \n FLNO: %c \n Callsign: %c \n" , 
    	vMeinStruct.kommentar, // da kommt nur leerer Mist bei rum
    	vMeinStruct.listEntry, // da kommt nur leerer Mist bei rum
    	vMeinStruct.arcid);    // da kommt nur leerer Mist bei rum
    
// Komischerweise funktioniert aber dieser SQL Aufruf	
// die Werte sind danach in der DB gefüllt
        
    EXEC SQL
        INSERT INTO
          MYSCHEMA.MYTABLE2 (            
            LIST_ENTRY,            
            ARCID)
        VALUES (            
            :vMeinStruct.listEntry,
            :vMeinStruct.arcid);

   [.......]

    return root;
}
 
Zuletzt bearbeitet:
Hallo!


Wenn mich nicht alles täuscht dann musst du mit einem Pfeil ("->") statt einem Punkt darauf zu greifen.


Gruß Buba!
 
Wie und wo ist "vMeinStruct" deklariert? Die Zuweisung ist in jedem Fall so nicht richtig, weil du mit "*input" den Wert an der Startadresse von "input" zuweist, aber eigentlich die Adresse selbst benötigt wird. Für eine richtige Kopie müsstest du den Spereicherbereich von "input" kopieren.
Allerdings könntest du auch direkt mit "input" arbeiten:
C++:
input->kommentar   ...
input->listEntry    ...
input->arcid   ...
Gruß MCoder
 
Direkt mit "input->..." zu arbeiten funktioniert leider auch nicht. Es kommt zu folgender Ausgabe, wobei die Fragezeichen auf dem UNIX System als Blöcke dargestellt werden:
Code:
Kommentar: ?
 FLNO:
 Callsign: ?

Das Struct wird folgendermaßen in einer Include Datei definiert:
Code:
/* meinStruct structure */
extern struct meinStruct {
    char   arcid[10];   
    long int   listEntry;
    char   kommentar[400000];     
} vMeinStruct;
 
Hhmmm, ich D§%§&kopf hab mir die printf Funktion nicht genau genug angesehen. Es muss heißen:

Code:
printf(" Kommentar: %s \n FLNO: %d \n Callsign: %s \n" , 
    	input->kommentar, 
    	input->listEntry, 
    	input->arcid);

Dann klappts auch. Sorry und vielen Dank!
 
Zurück