微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我不明白 inih 是如何工作的

如何解决我不明白 inih 是如何工作的

几个小时以来,我一直在尝试使用 inih lib 读取一个 ini 文件,但我仍然没有完全理解这段代码,尤其是 configuration* pconfig = (configuration*)user;,以及用于处理函数的参数是什么?

>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../ini.h"

typedef struct
{
    int version;
    const char* name;
    const char* email;
} configuration;

static int handler(void* user,const char* section,const char* name,const char* value)
{
    configuration* pconfig = (configuration*)user;

    #define MATCH(s,n) strcmp(section,s) == 0 && strcmp(name,n) == 0
    if (MATCH("protocol","version")) {
        pconfig->version = atoi(value);
    } else if (MATCH("user","name")) {
        pconfig->name = strdup(value);
    } else if (MATCH("user","email")) {
        pconfig->email = strdup(value);
    } else {
        return 0;  /* unkNown section/name,error */
    }
    return 1;
}

int main(int argc,char* argv[])
{
    configuration config;

    if (ini_parse("test.ini",handler,&config) < 0) {
        printf("Can't load 'test.ini'\n");
        return 1;
    }
    printf("Config loaded from 'test.ini': version=%d,name=%s,email=%s\n",config.version,config.name,config.email);
    return 0;
}

解决方法

user 是“通用指针”或“无类型指针”。

取消引用该指针会给您一个 void 类型的值,这是不可能的。

因此您必须将指针转换为正确的类型才能使用它。


至于参数及其用途,您可以read the source

但是对 INI files 稍加了解应该很容易推断出 section 参数是文件中某个部分的名称,而 name 是当前值名称,而 value 是值本身。

所以假设一个部分和值像

[foo]
bar = something

那么 section 将是 "foo"name 将是 "bar"value 将是 "something"

user 参数很可能是传递给 ini_parse 的第三个参数。

,

user 显然是指向 configuration 实例的指针,您提供给 ini_parsevoid* 只是 C 中可用指针的一种类型擦除。

section 是 .ini 文件部分的名称, name 是键名,value 是键的值。

ini_parse 为每个键调用处理程序,传递它 configuration 和解析迭代的结果。处理程序如何处理这些信息,由库的用户定义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。