我有一个格式为

"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"


我已经使用strtok()逐行对此进行了解析。
有没有一种方法可以使每一行的键值对?像将它们存储在某种数组中一样?我的意思是,如果我要SERVERID,我只说Array['SERVERID'],它将返回12345作为值。有没有办法用C做到这一点?

最佳答案

标准C没有像您要的那样提供任何“容器类型”。您仍然可以选择几种方法来解决您的问题:


听起来可能很傻,但是您可以切换到其他语言。至少要考虑一下。例如,想到了C ++,提供了std::map类型。
使用一些第三方库。流行的选择是GLib,它提供了您可以使用的hash table
总有您自己实施的选项。一个非常简单的想法是使用结构的数组,例如

struct stringpair {
    char *key;
    char *value;
};

struct stringpair *table;

// ...
size_t entries = 42; // number of entries you found
table = malloc(entries * sizeof *table); // check for NULL after this

// look for an entry:
char *value = 0;
for (size_t i = 0; i < entries; ++i)
{
    if (!strcmp(table[i].key, "SERVERID"))
    {
        value = table[i].value;
        break;
    }
}


当然,这是一个非常基本的解决方案,在输入大量内容时效果不佳。我也没有测试此代码,只是为了给您一个大概的想法。如果需要快速查找,则需要实现一个哈希表,或者使用选项1或2。

08-16 08:30