strtok之间的函数调用?

Function calls between strtok?

所以我使用 strtok 将 char 数组拆分为 " "。然后我将拆分的每个单词放入一个函数中,该函数将根据列表确定单词的值。但是,我将函数调用放在 while 循环中间以拆分 char 数组的所有内容都会停止。

是否必须拆分数组,将其存储在另一个数组中,然后遍历第二个数组?

    p = strtok(temp, " ");

    while (p != NULL) {
        value =  get_score(score, scoresize, p);
        points = points + value;
        p = strtok(NULL, " ");
    }

所以只要 value = get_score(score, scoresize, p); 存在 while 循环就会在第一个单词后中断。

strtok() 使用隐藏状态变量来跟踪源字符串位置。如果你在get_score()中直接或间接再次使用strtok,这个隐藏状态将被改变,使调用p = strtok(NULL, " ");变得毫无意义。

不要以这种方式使用 strtok(),要么使用在许多系统上可用的改进版本 strtok_r standardized in POSIX。或者 re-implement 它与 strspnstrcspn:

#include <string.h>
char *my_strtok_r(char *s, char *delim, char **context) {
    char *token = NULL;

    if (s == NULL)
        s = *context;

    /* skip initial delimiters */
    s += strspn(s, delim);
    if (*s != '[=10=]') {
        /* we have a token */
        token = s;
        /* skip the token */
        s += strcspn(s, delim);
        if (*s != '[=10=]') {
            /* cut the string to terminate the token */
            *s++ = '[=10=]';
        }
    }
    *context = s;
    return token;
}

...

    char *state;
    p = my_strtok_r(temp, " ", &state);

    while (p != NULL) {
        value =  get_score(score, scoresize, p);
        points = points + value;
        p = my_strtok_r(NULL, " ", &state);
    }