结构体指针使用报错:‘s_db_entry’未声明问题求助
解决结构体指针使用中的
s_db_entry undeclared错误 这个问题很典型——你把结构体类型的声明顺序搞反啦!
错误根源
C语言有个基本规则:必须先定义结构体类型,才能用它来声明变量。你原来的代码里,先写了:
struct s_db_entry *ptr_s_db_entry;
这时候编译器完全不知道struct s_db_entry是什么东西,自然会抛出's_db_entry' undeclared的错误,因为你后面才定义这个结构体类型。
修正方案
调整声明顺序,先定义结构体,再声明指针变量:
// 第一步:先定义结构体类型 struct s_db_entry { byte show; // 0 = show, 1 = don't show byte strlen_e_title; short strlen_e_text; int *ptr_e_title; int *ptr_e_text; }; // 第二步:再用这个类型声明指针变量 struct s_db_entry *ptr_s_db_entry;
可选简化:用typedef省掉重复的struct
如果不想每次写变量都带struct关键字,可以用typedef给结构体起别名:
typedef struct s_db_entry { byte show; // 0 = show, 1 = don't show byte strlen_e_title; short strlen_e_text; int *ptr_e_title; int *ptr_e_text; } s_db_entry; // 现在直接用别名声明变量即可 s_db_entry *ptr_s_db_entry;
额外注意点
- 确保
byte类型是已经定义的(比如你之前typedef过typedef unsigned char byte;),否则编译器还会报byte undeclared的错误。 - 你的
ptr_e_title和ptr_e_text是int*类型,但printf的%s格式符需要char*,所以在打印时最好强制转换一下,避免类型警告:printf("[%3d] [%s] [%s]\n",i, (char*)ptr_s_db_entry->ptr_e_title, (char*)ptr_s_db_entry->ptr_e_text);
修正后的完整代码片段示例
struct s_db_entry { byte show; // 0 = show, 1 = don't show byte strlen_e_title; short strlen_e_text; int *ptr_e_title; int *ptr_e_text; }; struct s_db_entry *ptr_s_db_entry; /* print database entries */ i = 0; while (i < *(uint32_t *)(*ptr_to_s_20b_parse_entries + 0xc)) { ptr_s_db_entry = *(struct s_db_entry **)(ptr_to_s_20b_parse_entries[2] + i * 4); if (ptr_s_db_entry->show == 0) { printf("[%3d] [%s] [%s]\n",i, (char*)ptr_s_db_entry->ptr_e_title, (char*)ptr_s_db_entry->ptr_e_text); } i = i + 1; } return;
内容的提问来源于stack exchange,提问作者FloKl
相关产品推荐
相关产品推荐

