gpt4 book ai didi

c - 实现 strtok 时的奇怪分配

转载 作者:行者123 更新时间:2023-12-03 01:36:01 28 4
gpt4 key购买 nike

我正在研究strtok的实现并有一个问题。在这一行,s [-1] = 0,我不明白tok如何限制为第一个标记,因为我们之前已经将中包含的所有内容分配给它>s.

char *strtok(char *s, const char *delim)
{
static char *last;

return strtok_r(s, delim, &last);
}

char *strtok_r(char *s, const char *delim, char **last)
{
char *spanp;
int c, sc;
char *tok;

if (s == NULL && (s = *last) == NULL)
return (NULL);

tok = s;
for (;;) {
c = *s++;
spanp = (char *)delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*last = s;
return (tok);
}
} while (sc != 0);
}
}

最佳答案

tok 之前并未分配“s 中包含的所有内容”。它被设置为指向与 s 中的地址相同的地址。

s[-1] = 0; 行相当于 *(s - 1) = '\0';,它设置了 where 之前的位置s 指向零。

通过将该位置设置为零,返回 tok 的当前值将指向一个数据范围从 toks - 2 的字符串> 并且在 s - 1 处正确以 null 终止。

还要注意,在返回tok之前,*last被设置为s的当前值,这是下一个 token 。 strtok 将此值保存在静态变量中,以便可以记住它并自动用于下一个标记。

关于c - 实现 strtok 时的奇怪分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24436274/

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