[英]adress pointer cast to struct
我在结构中使用指针时遇到问题。
我有一个数据库,每个条目都被声明为结构(其中成员代表 db-item)。
现在我想将每个解析的条目打印到文件中,并且必须使用指针指向数据库中的特定条目。 下面的代码片段诅咒了这个问题:
/* print database entries */
i = 0;
while (i < *(uint32_t *)(*ptr_to_s_20b_parse_entries + 0xc)) {
ptr_s_db_entry = *(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,ptr_s_db_entry->ptr_e_title,ptr_s_db_entry->ptr_e_text);
}
i = i + 1;
}
}
return;
错误:
[错误] 's_db_entry' 未声明(在此函数中首次使用)
声明了以下变量:
struct s_db_entry *ptr_s_db_entry;
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;
};
ptr_to_s_20b_parse_entries 是来自调用者的参数。
已经谢谢你了!
你需要
(struct s_db_entry **)
代替
(s_db_entry **)
因为它不是typedef
的。
除非您没有显示该部分, s_db_entry
不是代码中的类型。
在代码中
ptr_s_db_entry = *(s_db_entry **)(ptr_to_s_20b_parse_entries[2] + i * 4);
需要改为
ptr_s_db_entry = *(struct s_db_entry **)(ptr_to_s_20b_parse_entries[2] + i * 4);
^^^^^^
[错误] 's_db_entry' 未声明(在此函数中首次使用)
对此有一些建议。 更改定义以创建结构的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;
};
对此:(也建议在此处更改名称。)
//typedef struct s_db_entry {//name tag may be unnecessary at this point
typedef struct {
byte show; // 0 = show, 1 = don't show
byte strlen_e_title;
short strlen_e_text;
int *ptr_e_title;
int *ptr_e_text;
}db_entry_s;//note, typedef symbol is unique from name tag if both are to be used.
这当然需要
(struct s_db_entry **)
变成这样:
(db_entry_s **)
(请注意,看到后缀_s
来指示结构typedef
比例如前置s_
更常见。)
同样在您的代码中,您显示此声明struct s_db_entry ptr_s_db_entry;
在定义被引用的实际结构之前。 它应该放在struct
(或struct typedef
,如果您选择使用该方法)定义之下。
typedef struct {
byte show; // 0 = show, 1 = don't show
byte strlen_e_title;
short strlen_e_text;
int *ptr_e_title;
int *ptr_e_text;
}db_entry_s;
db_entry_s *ptr_db_entry_s;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.