这几次封装函数,老出现这样的问题,总结一下:
原因:
我想把我定义的结构体隐藏起来,不想让外部调用我接口的人看到我结构体内部的数据,而在头文件里只是定义了一个结构体变量。但是,我在调试程序时,又试图调用结构体内部的数据,就出现了上述问题。
错误的定义:
.h
typedef struct a a;
int a(a *p_a);
.c
struct a
{
int b;
char *c;
};
int a(a *p_a)
{
.......
}
int main()
{
a *pp;
a(pp);
printf("%d\n", pp->b); //问题就出在这儿,因为命名是把结构体隐藏起来了
printf("%s\n", pp->c); //却又在这里调它,
}
解决问题的办法:
要么把结构体暴露出来,要么返回一个结构体句柄,“鱼和熊掌不可兼得”
1:
.h
struct a
{
int b;
char *c;
};
typedef struct a a;
int a(a *p_a);
.c
int a(a *p_a)
{
.......
}
int main()
{
a *pp;
a(pp);
printf("%d\n", pp->b);
printf("%s\n", pp->c);
}
阅读(2483) | 评论(0) | 转发(0) |