char *train_images = option_find_str(options, "train", "data/train.list");

29 篇文章 1 订阅
27 篇文章 2 订阅
 char *train_images = option_find_str(options, "train", "data/train.list");

这是darknet中训练yolo模型时读取保存在链表中文件的函数,这里详细解析一下其内部结构;
前面已经写过了如何存入链表的博客;现在分析一下如何从链表中读取需要的数据;其函数主体如下所示:

//其参数分别为链表头指针、关键字和默认数据
char *option_find_str(list *l, char *key, char *def)
{
    char *v = option_find(l, key);//从链表中获取关键字的键值,其函数主体见下
    if(v) return v;//如果输出的键值存在则输出
    if(def) fprintf(stderr, "%s: Using default '%s'\n", key, def);//当键值不存在时,输出def
    return def;
}

option_find函数

char *option_find(list *l, char *key)
{
    node *n = l->front;//创建一个node结点并将其赋上l->front指向的地址,l->front就是头指针,其指向链表第一个结点,则新建结点n的地址就是链表第一个结点所在地址;
    while(n)//链表不为空会一直查询,直到内部找到跳出
    {
        kvp *p = (kvp *)n->val;//创建一个kvp结构体,并将结点n的val赋给它,n->val中所保存的就是保存数据的kvp结构体指针地址,其指向保存数据的kvp结构体,这样新建p的地址和保存数据的kvp结构体地址相同了。
        if(strcmp(p->key, key) == 0)//对比关键字是否相同,若相同则返回关键字对应的键值
        {
            p->used = 1;
            return p->val;
        }
        n = n->next;//指向链表的下一个结点
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值