【问题标题】:Cannot write data to struct无法将数据写入结构
【发布时间】:2015-04-07 08:25:35
【问题描述】:

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;
}

但是,当我尝试编译它时,我得到下一个错误:

错误! '->' 的表达式必须是'指向结构或联合的指针'

对于那些行:

pconfig[module_count]->version = strdup(value);
pconfig[module_count]->name = strdup(value);

我是编程新手,不明白为什么会这样。请帮忙:-)

【问题讨论】:

    标签: c parsing pointers typedef ini


    【解决方案1】:

    pconfig 是一个指向 module_config 结构实例的指针。

    在这个指针上使用 pconfig[module_count] 相当于取消引用指针 (pconfig+module_count),即它相当于 *(pconfig+module_count)

    因此,pconfig[module_count] 不再是指针。您需要使用pconfig[module_count].version(pconfig+module_count)->version

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多