如何从C中的ini文件访问数组?

时间:2015-07-14 08:26:29

标签: c configuration ini

我创建了一个如下所示的.ini文件:

[one]
heading=" available state";
name=['A', 'D', 'H'];

[two]
type= ["on", "off", "switch"];

访问此ini文件的主要C程序如下所示:

#include <stdio.h>
#include <Windows.h>

int main ()
{

   LPCSTR ini = "C:\coinfiguration.ini";

   char returnValue1[100];
   char returnValue2[100];
   GetPrivateProfileString("states", "title", 0, returnValue1, 100, ini);
   GetPrivateProfileString("reaction", "reac_type", 0, returnValue2, 100, ini);

   printf(returnValue2[10]);

   printf("%s \n" ,returnValue1);
   printf(returnValue2);



   return 0;

}

我能够从第一节和整个数组名称显示整个标题。但不是像这样显示整个数组(名称)

['A', 'D', 'H']; 

我只想显示“A&#39;”一词。 同样,对于第二节而不是这个

["on", "off", "switch"];

我只想透露&#34; on&#34;。 我无法想办法做到这一点。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

INI文件非常简单,没有类似于数组的东西,那么你必须自己拆分该字符串。

幸运的是,它很简单(让我假设我们可以省略 [] ,因为它们没有为此示例添加任何内容):

char* buffer = strtok(returnValue1, ",");

for (int i=0; i <= itemIndex && NULL != buffer; ++i) {
    buffer = strtok(NULL, ",");
    while (NULL != buffer && ' ' == *buffer)
        ++buffer;
}

if (NULL != buffer) { // Not found?
    printf("%s\n", buffer);

    if (strcmp(buffer, "'A'") == 0)
        printf("It's what I was looking for\n");
}

对于字符串修剪(bot为 [,空格和最终引号),您可以使用How do I trim leading/trailing whitespace in a standard way?中的代码。

(请注意代码未经测试)

答案 1 :(得分:1)

解决问题的一种方法是自己解析它(这实际上是唯一的方式),解析它的一种方法是这样的:

  1. 删除前导和尾随'['']'(分别阅读strchrstrrchr函数)
  2. 在逗号','上拆分剩余的字符串(阅读strtok功能)
  3. 对于每个子字符串,删除前导和尾随空格(阅读isspace函数)
  4. 您现在拥有了这些值,可以将它们放入列表或字符串数​​组中