Hallo,
union mod_vals_u {
char **modv_strvals;
struct berval **modv_bvals;
} mod_vals;
der Trick an einer union ist, dass beide (bzw. alle) darin angelegten Members einander überlagern, d.h. denselben Speicherplatz belegen. Ist dir das bewusst? Okay, nur zur Sicherheit.
char *my_string = malloc(256);
strnpy(my_string, "TEST", 256);LDAPMod mod;
mod.mod_op = LDAP_MOD_ADD;
mod.mod_type = "cn";
mod.mod_values = {my_string, NULL}; /* <- */
Löst man das Macro mod_values auf, das in diesem Ausdruck steht, ergibt sich:
mod.mod_vals.modv_strvals = {my_string, NULL};
Dies funktioniert aber nicht - der Compiler meldet in der Zeile <- immer einen Syntaxfehler, ich kann diesen jedoch nicht erkennen. Hat jemand eine Ahnung warum dies so ist?
Man kann in C keine komplexen Datenstrukturen einfach so zuweisen. Du musst also die Strukturen Schritt für Schritt aufbauen. Den ersten Schritt hast du (Speicher reservieren für den ersten String my_string). Der zweite Schritt wäre, Speicher für zwei oder mehr char* zu reservieren und die Adresse von my_string sowie die Konstante NULL dort einzutragen. Und der dritte Schritt wäre, in mod.mod_vals.modv_strvals die Adresse dieses char*-Arrays zu hinterlegen.
So long,
Martin
Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.