我非常喜欢 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
是一个本地静态,因此它会在令牌后持续存在 找到,并在找不到更多时重置为NULL2)后续
strtoken
来电s
NULL
因此,如果将第一次检查写成:
,则第一次检查不会相同if (s == NULL && p == NULL)
或者是否有理由按原样编写?
最后:return p = NULL
;这只是一个简写:
p = NULL;
return p;
答案 0 :(得分:1)
因此,如果第一次检查被写为:
,那么第一次检查是否相同
if (s == NULL && p == NULL)
当p
为NULL时,是。当p
不为NULL时,不。因为s=p
的副作用并没有发生。当s
语句为false时,将使用此值if
。
最后:return p = NULL;这只是一个简写:
p = NULL;
return p;
是