c - 如何创建一个由使用 strtok 函数创建的标记组成的数组?

标签 c arrays ini strtok

我是 .ini 文件的新手,因此这个 qn(这可能看起来很傻)。我创建了一个 .ini 文件并通过我的 C 程序访问它。 ini 文件如下所示:

 [key]
 title = A,H,D

C 程序访问它使用:

 LPCSTR ini ="C:\\conf.ini;
 char var[100];
 GetPrivateProfileString("key", "title", 0, var, 100, ini);

 printf("%s", var);
 char* buffer = strtok(var, ", ");
do{
    printf("%s", buffer);

    if (strcmp(buffer, "A")==0)
        printf("Hello");

    puts("");
}while ((buffer=strtok(NULL, ", "))!= NULL);

输出看起来像:

  A H D F G IAHello
  H
  D
  F
  G

现在我需要做的是再次使用这些单独的标记在我的 C 程序中形成一个带有索引的数组。例如:

  char x[A, H, D, F, G]

所以当我引用索引 2 时,x[2] 应该给我 'D'。有人可以建议一种方法来做到这一点。我以前从未使用过 strtok,因此很困惑。提前谢谢你。

最佳答案

这个问题与其他关于获取外部信息并将其存储在数组中的问题非常相似。

这里的问题是数组中要存储的元素数量。

您可以使用链接列表,但对于这个例子,我会扫描文件,获取数组所需的项目总数 - 然后再次解析文件数据 - 将项目存储在数组中。

第一个循环遍历并计算要存储的项目,按照您发布的示例。我将执行第二个循环作为示例 - 请注意在我的示例中您将创建 nTotalItems 并计算项目的数量,将其存储在 nTotalItems 中......我假设您想要存储一个字符串,而不仅仅是一个 char ...

另请注意这是一个草稿示例,在工作中完成 - 仅用于展示将 token 存储到数组中的方法,因此没有错误检查 ec

 // nTotalItems has already been calculated via the first loop...
 char** strArray = malloc( nTotalItems * sizeof( char* ));
 int    nIndex  = 0;

 // re-setup buffer
 buffer = strtok(var, ", ");
 do {

     // allocate the buffer for string and copy...    
     strArray[ nIndex ] = malloc( strlen( buffer ) + 1 );
     strcpy( strArray[ nIndex ], buffer );

     printf( "Array %d = '%s'\n", nIndex, strArray[ nIndex ] );

     nIndex++;

 } while ((buffer=strtok(NULL, ", "))!= NULL);

关于c - 如何创建一个由使用 strtok 函数创建的标记组成的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425663/

相关文章:

java - 使用两个 for 循环填充二维数组

php - Azure .user.ini 不工作

delphi - 将 INI 文件中的 base64 编码数据加载回 TPicture?

c# - 写入 INI 文件中的某个部分

c - pthread_cancel 后出现段错误

c - 如何只打印字符串[C]中的第一个句子?

c - 如何从 "hanging"保留此 C 程序?

php - mysql : fetch multidimensional arrays separated and sorted by date column

javascript - 无法访问Javascript变量: undefined

c - 取消引用强制转换的 void 指针并使用后增量运算符