我对C有点陌生,我正在尝试访问结构内部的并集内部结构的某些成员。我尝试过类似struct.struct.member
的操作,但是失败了,我也尝试使用箭头运算符(用'->'代替'。')来访问它,但是效果不佳。
因此,以我为例,我试图访问“ tree_node”结构内部的“程序”。这是该结构的代码:
struct tree_node;
typedef struct tree_node node_t;
struct tree_node
{
enum node_type type;
union {
struct {
char *program;
char **argv;
size_t argc;
} command;
struct {
node_t **parts; // array
size_t n_parts;
} pipe;
struct {
node_t *child;
int fd; // >= 0 specific fd; -1 stdout+stderr
enum redirect_type mode;
union {
int fd2;
char *target;
};
} redirect;
struct {
node_t *child;
} subshell;
struct {
node_t *child;
} detach;
struct {
node_t *first;
node_t *second;
} sequence;
};
};
我当前用来访问“程序”的代码(没有单词)是这样的:
node_t *n
if (n.command.program == "cd")
{
printf("cd command entered\n");
}
知道我要去哪里错了吗? 干杯:)
答案 0 :(得分:2)
这里有一个示例,说明如何通过对象或指针访问那些结构/联合。看最后一个例子。它显示了如何使用匿名结构/联合-它们只需要具有明确的字段名称
void foo()
{
node_t obj, *ptr;
ptr -> pipe.n_parts = 5;
printf("%s\n", ptr -> command.program);
obj.detach.child = ptr;
obj.bar = obj.foo;
}
数据结构在这里
struct tree_node;
typedef struct tree_node node_t;
struct tree_node
{
int type;
union {
struct {
char *program;
char **argv;
size_t argc;
} command;
struct {
node_t **parts; // array
size_t n_parts;
} pipe;
struct {
node_t *child;
int fd; // >= 0 specific fd; -1 stdout+stderr
int mode;
union {
int fd2;
char *target;
};
} redirect;
struct {
node_t *child;
} subshell;
struct {
node_t *child;
} detach;
struct {
node_t *first;
node_t *second;
} sequence;
struct {
node_t *bar;
node_t *foo;
};
};
};