在下面这个code中通过strsep将p表示的字符串一“,” 分开,例如12,34,56.会先返回12,然后是34,最后是56

while ((id = strsep(&p, “,”)))

我们看看strsep的实现

char *strsep(char **s, const char *ct)

{

    char *sbegin = *s;

    char *end;

    if (sbegin == NULL)

        return NULL;

    end = strpbrk(sbegin, ct);

    if (end)

        *end++ = ‘\0’;

    *s = end;

    return sbegin;

}

首先判断*s不能为null,然后调用strpbrk找到地一个“,”,然后在最后添加’\0’,然后将*s = end,而*sbegin = *s,最后返回sbegin。

在strsep 中有调用strpbrk 来在sbegin 找到地一个“,”

char *strpbrk(const char *cs, const char *ct)

{

    const char *sc1, *sc2;

    for (sc1 = cs; *sc1 != ‘\0’; ++sc1) {

        for (sc2 = ct; *sc2 != ‘\0’; ++sc2) {

            if (*sc1 == *sc2)

                return (char *)sc1;

        }

    }

    return NULL;

}

可见在strpbrk 中是每个字符逐个比较的。找到的话就返回,否则返回NULL。