无法将数据写入结构
Cannot write data to struct
qq4all。
我有一个任务 - 为这样的语法编写配置解析器:
[module]
name = first
imitationType = first
[module]
name = second
imitationType = second
等
我找到了漂亮的配置解析器 - inih,但我不能强制它按照我的意愿工作。这是我的代码,写在 inih 示例上:
typedef struct {
const char* name;
const char* imitation_type;
} module_config;
int module_count = 0;
static int handler(void* user, const char* section, const char* name,
const char* value)
{
module_config* pconfig = (module_config*)user;
pconfig = (module_config *) malloc(module_count*sizeof(module_config));
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
if (strcmp(section, "module") == 0) {
if (MATCH("module", "name")) {
pconfig[module_count]->version = strdup(value);
} else if (MATCH("module", "imitationType")) {
pconfig[module_count]->name = strdup(value);
} else {
return 0; /* unknown section/name, error */
}
++module_count;
pconfig = (module_config *) realloc(pconfig, module_count * sizeof(module_config));
}
return 1;
}
但是,当我尝试编译它时,出现下一个错误:
Error! Expression for '->' must be 'pointer to struct or union'
对于那些行:
pconfig[module_count]->version = strdup(value);
pconfig[module_count]->name = strdup(value);
我是编程新手,不明白为什么会这样。请帮助:-)
pconfig 是指向 module_config 结构实例的指针。
在此指针上使用 pconfig[module_count] 等同于解除对指针 (pconfig+module_count)
的引用,即等同于 *(pconfig+module_count)
.
因此,pconfig[module_count]
不再是一个指针。您需要使用 pconfig[module_count].version
或 (pconfig+module_count)->version
.
qq4all。 我有一个任务 - 为这样的语法编写配置解析器:
[module]
name = first
imitationType = first
[module]
name = second
imitationType = second
等 我找到了漂亮的配置解析器 - inih,但我不能强制它按照我的意愿工作。这是我的代码,写在 inih 示例上:
typedef struct {
const char* name;
const char* imitation_type;
} module_config;
int module_count = 0;
static int handler(void* user, const char* section, const char* name,
const char* value)
{
module_config* pconfig = (module_config*)user;
pconfig = (module_config *) malloc(module_count*sizeof(module_config));
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
if (strcmp(section, "module") == 0) {
if (MATCH("module", "name")) {
pconfig[module_count]->version = strdup(value);
} else if (MATCH("module", "imitationType")) {
pconfig[module_count]->name = strdup(value);
} else {
return 0; /* unknown section/name, error */
}
++module_count;
pconfig = (module_config *) realloc(pconfig, module_count * sizeof(module_config));
}
return 1;
}
但是,当我尝试编译它时,出现下一个错误:
Error! Expression for '->' must be 'pointer to struct or union'
对于那些行:
pconfig[module_count]->version = strdup(value);
pconfig[module_count]->name = strdup(value);
我是编程新手,不明白为什么会这样。请帮助:-)
pconfig 是指向 module_config 结构实例的指针。
在此指针上使用 pconfig[module_count] 等同于解除对指针 (pconfig+module_count)
的引用,即等同于 *(pconfig+module_count)
.
因此,pconfig[module_count]
不再是一个指针。您需要使用 pconfig[module_count].version
或 (pconfig+module_count)->version
.