C中获取字符串第一个元素的第一个元素

Get the first element of the first element of an string in C

我有一个变量,我在其中读取了一个 .txt 文件。该文件如下所示:

Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast


现在我想做的是,获取每个 'Element1' 并检查它是否等于特定字符串。
我阅读了很多有关函数 strtok() 的文章,并尝试使用它。
这是我的函数:(id是这个特殊的字符串,我在函数中转换它。)

int PLUexists(int id) {

    char idc[3];
    sprintf(idc, "%d", id);
    printf("%s", idc);

    /* My Main String */
    FILE *plu = fopen("kassa_plu.txt", "r");
    char pluc[2000];
    while( fgets(pluc, sizeof(pluc), plu) !=0 );

    /* My Token */
    char *token;

    /* get first line */
    token = strtok(pluc, "#");

    while( token != NULL ) {
        printf(" %s \n", token);

        // Without that block, I get all lines seperated...
        char t[255];
        strcpy(t, token);

        if ( strcmp(strtok(t, "|"), idc) == 0) {
            printf("Jep");
            return 1;
        }
        // End 'block'

        token = strtok(NULL, "#");
    }
    return 0;
}

现在,如果我只打印出第一个标记(并重复它),我会将所有行分开(见下文)但是当我还解析 printf(" %s \n", token); 和 [=16= 之间的代码时] 不行。

没有方块:

Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast

有了它:

Element1|Element2|Element3|...|ElementLast
Element2|Element3|...|ElementLast
Element3|...|ElementLast
...|ElementLast
ElementLast

你的主要问题是,当在循环内,你用一个非空的第一个参数调用 strtok() 时,你因此告诉该函数放弃之前的标记化(通过 # 分隔符)它正在努力执行新的标记化。您可以考虑使用 strtok_r() 代替,它允许您一次维护多个标记化的状态,但由于您希望每行上的 first 标记并且只有第一行,我' d 考虑根本不在内部循环中使用 strtok[_r]()

例如,这是基于 strchr() 的类似方法:

    while( token != NULL ) {
        printf(" %s \n", token);

        char *delim = strchr(token, '|');
        if (delim) *delim = '[=10=]';

        if (strcmp(token, idc) == 0) {
            printf("Jep");
            return 1;
        }

        token = strtok(NULL, "#");
    }