试图理解strtok的这个实现中的代码

时间:2018-02-22 02:45:53

标签: c strtok

我非常喜欢 c 新手,我正在学习遵循Standford的CS107视频(我不是那里的学生)。

如果有人有兴趣,链接如下

查看strtok的以下实现,我不确定为什么第一个 if 语句以这种方式编写:if (s == NULL && ((s = p) == NULL))

char *strtok(char *s, const char *sep)
{
    static char *p = NULL;

    if (s == NULL && ((s = p) == NULL))
        return NULL;
    s += strspn(s, sep);
    if (!*s)
        return p = NULL;
    p = s + strcspn(s, sep);
    if (*p)
        *p++ = '\0';
    else 
        p = NULL;
    return s;
}

这是我到目前为止所确定的内容:

  

1)静态p是一个本地静态,因此它会在令牌后持续存在   找到,并在找不到更多时重置为NULL

     

2)后续strtoken来电s NULL

因此,如果将第一次检查写成:

,则第一次检查不会相同
if (s == NULL && p == NULL)

或者是否有理由按原样编写?

最后:return p = NULL;这只是一个简写:

p = NULL;
return p;

CS107 Winter 18 Screencasts

Amazing CS107 Lectures from 2011

An Rpi based CS107e

1 个答案:

答案 0 :(得分:1)

  

因此,如果第一次检查被写为:

,那么第一次检查是否相同
if (s == NULL && p == NULL)

p为NULL时,是。当p不为NULL时,不。因为s=p的副作用并没有发生。当s语句为false时,将使用此值if

  

最后:return p = NULL;这只是一个简写:

p = NULL;
return p;