【问题标题】:如何删除由 iniparser 创建的额外空格?
【发布时间】:2022-01-23 10:53:13
【问题描述】:

最近我将iniparser 作为首选。然而,它的 API 创建了太多的空格,导致内存浪费。

例如,iniparser_set() 将创建

/*test.ini*/
[section]
key                               = value

改为

/*test.ini*/
[section]
key = value

从嵌入式系统的角度来看,删除那些多余的空格对于节省内存空间是一件好事。那么,如何解决呢?

【问题讨论】:

  • 我在iniparser_dumpsection_ini函数中看到了这一行:fprintf(f, "%-30s = %s\n", d->key[j]+seclen+1, d->val[j] ? d->val[j] : "");。如您所见,key 使用格式说明符%-30s 打印。也许这就是问题所在。
  • 无关:为小型嵌入式系统编写代码要求您避免浪费内存/cpu 周期/等,这是正确的。但是您真的确定 ini 文件中的一些额外空间值得您花时间吗?
  • @4386427 是的,因为它会像 100 多个 ini 文件
  • 您可以克隆源代码并纠正有问题的 printf,正如 @kiner_shah 所指出的那样。或者,了解内部情况,您可以自己转储数据,而无需使用原始功能。生成inifiles很容易,也许你可以避免使用这个库。

标签: c file embedded ini


【解决方案1】:

根据iniparser的源代码(https://github.com/ndevilla/iniparser/blob/deb85ad4936d4ca32cc2260ce43323d47936410d/src/iniparser.c#L312):

iniparser_dumpsection_ini函数中,有这一行:

fprintf(f,
    "%-30s = %s\n",
    d->key[j]+seclen+1,
    d->val[j] ? d->val[j] : "");

如您所见,key 使用格式说明符 %-30s 打印,这可能是导致此问题的原因。

因此,您可以克隆 repo 源代码并进行更改。例如,将格式说明符替换为%s,如:

fprintf(f,
    "%s = %s\n",        // CHANGE HERE
    d->key[j]+seclen+1,
    d->val[j] ? d->val[j] : "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多