c - 如何在 C 中制作 token 解析器?

标签 c parsing token

我见过各种控制台应用程序的“配置”文件(是的,文本文件),如下所示

<token> <value>

我将如何在 C 中解析这样的东西,其中 < value > 可以是字符串、字母甚至是整数/ float / double ?

我读到这个问题“How do I parse a token from a string in C?”,其中主要推荐使用 strtok,但它也不是线程安全的,我正计划生成多个线程(前提是我能够完成我的应用程序)

附言 这是 token 和值的示例

user username123
pass 123456

啊,我忘了棘手的部分。我还必须能够解析一个标记,它有多个值,或者用逗号分隔。

最佳答案

我认为 fgets()sscanf() 是你的 friend :

int parseTokens(FILE *filePtr, char **tokens, char **values)
{
    int i = 0;

    char line[128];

    while (fgets(line, 127, filePtr)) {
        tokens[i] = malloc(64);
        values[i] = malloc(64);

        sscanf(line, "%s %s", tokens[i], values[i]);

        i++;
    }

    return i;
}

int main(void)
{
    char *tokens[20];
    char *values[20];

    FILE *filePtr = fopen("~/test.txt", "r");

    if (!filePtr)
    {
        fprintf(stderr, "Error opening file: %s", strerror(errno));
    }

    int count = parseTokens(filePtr, tokens, values);

    for (int i = 0; i < count; i++) {
        printf("%s %s\n", tokens[i], values[i]);

        free(tokens[i]);
        free(values[i]);
    }

    fclose(filePtr);
}

关于c - 如何在 C 中制作 token 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917093/

相关文章:

api - Youtube API 刷新 token 错误 400(OAuth2 错误)

C - 如何保护变量在函数中的某个点后不被意外更改

swift - 匹配 Swift 中全文搜索的所有标记

C:使用floodfill填充一个圆

c++ - Exprtk 解析器无法在 VS 2015 上运行?

javascript - 使用javascript将文本文件读入变量

c++ - 解析 C++ 的复杂性

facebook - 如何使用 facebook API 获取公共(public)墙贴

c - 如何正确初始化 C 中的模型矩阵?

c - 无法将正确的值写入 typedef 数组的指针