当前位置:   article > 正文

tomlc99开源库使用

tomlc99开源库使用

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

1.加载tomlc99库

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

2.使用tomlc99库解析toml文件

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

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

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

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <errno.h>
  4. #include <stdlib.h>
  5. #include "toml.h"
  6. static void error(const char* msg, const char* msg1)
  7. {
  8. fprintf(stderr, "ERROR: %s%s\n", msg, msg1?msg1:"");
  9. exit(1);
  10. }
  11. int main()
  12. {
  13. FILE* fp;
  14. char errbuf[200];
  15. // 1. Read and parse toml file
  16. fp = fopen("sample.toml", "r");
  17. if (!fp) {
  18. error("cannot open sample.toml - ", strerror(errno));
  19. }
  20. toml_table_t* conf = toml_parse_file(fp, errbuf, sizeof(errbuf));
  21. fclose(fp);
  22. if (!conf) {
  23. error("cannot parse - ", errbuf);
  24. }
  25. // 2. Traverse to a table.
  26. toml_table_t* server = toml_table_in(conf, "server");
  27. if (!server) {
  28. error("missing [server]", "");
  29. }
  30. // 3. Extract values
  31. toml_datum_t host = toml_string_in(server, "host");
  32. if (!host.ok) {
  33. error("cannot read server.host", "");
  34. }
  35. toml_array_t* portarray = toml_array_in(server, "port");
  36. if (!portarray) {
  37. error("cannot read server.port", "");
  38. }
  39. printf("host: %s\n", host.u.s);
  40. printf("port: ");
  41. for (int i = 0; ; i++) {
  42. toml_datum_t port = toml_int_at(portarray, i);
  43. if (!port.ok) break;
  44. printf("%d ", (int)port.u.i);
  45. }
  46. printf("\n");
  47. // 4. Free memory
  48. free(host.u.s);
  49. toml_free(conf);
  50. return 0;
  51. }
3.访问表内容

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

  1. toml_string_in(tab, key);
  2. toml_bool_in(tab, key);
  3. toml_int_in(tab, key);
  4. toml_double_in(tab, key);
  5. toml_timestamp_in(tab, key);
  6. toml_table_in(tab, key);
  7. toml_array_in(tab, key);

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

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

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

int size = toml_array_nelem(arr);

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

  1. toml_string_at(arr, idx);
  2. toml_bool_at(arr, idx);
  3. toml_int_at(arr, idx);
  4. toml_double_at(arr, idx);
  5. toml_timestamp_at(arr, idx);
  6. toml_table_at(arr, idx);
  7. toml_array_at(arr, idx);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/168921
推荐阅读
相关标签
  

闽ICP备14008679号