gpt4 book ai didi

c - strtok之间的函数调用?

转载 作者:行者123 更新时间:2023-12-02 07:17:59 24 4
gpt4 key购买 nike

所以我使用 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 ,在许多系统上可用。或者用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 != '\0') {
/* we have a token */
token = s;
/* skip the token */
s += strcspn(s, delim);
if (*s != '\0') {
/* cut the string to terminate the token */
*s++ = '\0';
}
}
*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);
}

关于c - strtok之间的函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56018010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com