tomlc99开源库使用

news/2024/7/10 20:22:55 标签: 开源

下载地址:GitHub - cktan/tomlc99: TOML C library

1.加载tomlc99库

只需要在工程当中添加toml.h / toml.c这两个文件就可以了

2.使用tomlc99库解析toml文件

以下是从文件中获取值的常用步骤:

  1. 解析 TOML 文件。
  2. 遍历并找到 TOML 中的表。
  3. 从表中提取值。
  4. 释放分配的内存。

下面是解析示例表中的值的示例。

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include "toml.h"

static void error(const char* msg, const char* msg1)
{
    fprintf(stderr, "ERROR: %s%s\n", msg, msg1?msg1:"");
    exit(1);
}


int main()
{
    FILE* fp;
    char errbuf[200];

    // 1. Read and parse toml file
    fp = fopen("sample.toml", "r");
    if (!fp) {
        error("cannot open sample.toml - ", strerror(errno));
    }

    toml_table_t* conf = toml_parse_file(fp, errbuf, sizeof(errbuf));
    fclose(fp);

    if (!conf) {
        error("cannot parse - ", errbuf);
    }

    // 2. Traverse to a table.
    toml_table_t* server = toml_table_in(conf, "server");
    if (!server) {
        error("missing [server]", "");
    }

    // 3. Extract values
    toml_datum_t host = toml_string_in(server, "host");
    if (!host.ok) {
        error("cannot read server.host", "");
    }

    toml_array_t* portarray = toml_array_in(server, "port");
    if (!portarray) {
        error("cannot read server.port", "");
    }

    printf("host: %s\n", host.u.s);
    printf("port: ");
    for (int i = 0; ; i++) {
        toml_datum_t port = toml_int_at(portarray, i);
        if (!port.ok) break;
        printf("%d ", (int)port.u.i);
    }
    printf("\n");

    // 4. Free memory
    free(host.u.s);
    toml_free(conf);
    return 0;
}
3.访问表内容

TOML 表是使用字符串键进行查找的字典。在一般情况下,表上的所有访问函数都命名为 toml_*_in(...);在正常情况下,您知道密钥及其内容类型,并且可以进行检索使用以下函数之一:

toml_string_in(tab, key);
toml_bool_in(tab, key);
toml_int_in(tab, key);
toml_double_in(tab, key);
toml_timestamp_in(tab, key);
toml_table_in(tab, key);
toml_array_in(tab, key);

您还可以使用整数索引查询表中的键:

toml_table_t* tab = toml_parse_file(...);
for (int i = 0; ; i++) {
    const char* key = toml_key_in(tab, i);
    if (!key) break;
    printf("key %d: %s\n", i, key);
}
4.访问阵列内容

可以使用整数索引对 TOML 数组进行去引用。通常,数组上的所有访问方法都命名为 toml_*_at();要获取数组的大小,请执行以下操作:

int size = toml_array_nelem(arr);

若要获取数组的内容,请使用有效的索引并调用以下函数之一:

toml_string_at(arr, idx);
toml_bool_at(arr, idx);
toml_int_at(arr, idx);
toml_double_at(arr, idx);
toml_timestamp_at(arr, idx);
toml_table_at(arr, idx);
toml_array_at(arr, idx);

http://www.niftyadmin.cn/n/5393286.html

相关文章

力扣随笔之移除元素(简单27)

思路&#xff1a;定义一个指针left&#xff0c;使该指针及该指针左边的数全部都不等于val&#xff0c;定义一个遍历指针i&#xff0c;若nums[i] val&#xff0c;则i自加&#xff0c;若nums[i] ! val&#xff0c;则将left&#xff0c;并将nums[i]的值赋给nums[left]&#xff0c…

多表联合分页查询(一)----数据库与返回实体类准备

目录 一、数据库表准备1.文章表2.用户表3.用户详细信息表4.用户点赞表5.用户评论表 二、需求描述三、返回实体类 一、数据库表准备 1.文章表 CREATE TABLE yan_article (id bigint(20) NOT NULL,summary varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NU…

[ffmpeg] x264 配置参数解析

背景 创建 x264 编码器后&#xff0c;其有一组默认的编码器配置参数&#xff0c;也可以根据需要修改参数&#xff0c;来满足编码要求。 具体参数 可修改的参数&#xff0c;比较多&#xff0c;这边只列举一些常用的。 获取可以配置的参数 方式1 查看 ffmpeg源码 libx264.c…

leetcode-hot100-双指针

剪枝&#xff0c;减少不必要的计算 283. 移动零 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出: [0] 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 第一印象&#xff1a;使用一个辅助数组&#xff0c;同时以…

二、系统知识笔记-系统架构概述

一、系统架构定义 系统架构是指对一个系统的整体结构和组成部分进行描述和规划的过程。系统架构定义决定了系统的设计、开发和实施过程中的关键方向和决策。是系统的骨架和根基&#xff0c;支撑和链接各个部分&#xff0c;包括组件、连接件、约束规范以及指导这些内容设计与演…

3D Web轻量化引擎HOOPS Communicator V2024版:简化灯光与颜色编辑流程、改进了IFC文件的镶嵌

HOOPS Communicator是Tech Soft 3D旗下的主流产品之一&#xff0c;具有强大的、专用的高性能图形内核&#xff0c;专注于基于Web的高级3D工程应用程序。 其由HOOPS Server和HOOPS Web Viewer两大部分组成&#xff0c;提供了HOOPS Convertrer、Data Authoring的模型转换和编辑工…

MySQL认证方法介绍

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL数据库的认证方法对于确保数据安全和维护系统完整性至关重要。在MySQL中&#xff0c;有多种认证方法可供选择&#xff0c;每种方法都有其特定的用途和配置方式。本文将详细…

手机录屏没声音?快来试试这个方法

“手机录屏功能出了问题&#xff0c;录制的视频没有声音&#xff0c;试了好几次都不行。明明想记录下一段美好的旋律&#xff0c;打开一看却只有无声的影像。哪位高手知道怎么解决手机录屏没声音的问题呀&#xff1f;急求解决方案&#xff01;” 在使用手机过程中&#xff0c;…