C strpbrk代表什么?

C strpbrk代表什么?,c,C,我在用C做低级字符串工作时偶尔会用到它,但我始终无法理解它代表什么。我总是在脑海里把它说成“搅拌树皮”,但这感觉从来都不对 它没有任何其他字符串函数那样明显的词源,例如strchr(stringcharacter)或strspn(stringspan) 我模模糊糊地记得,在某个地方读到,所有原始标准库函数都被限制为7个字符的名称,要么是为了保持与Fortran的兼容,要么是因为在原始C标准中,长度超过7个字符的标识符被认为等同于它们的7个字符前缀或其他什么。有人能证实/否认/澄清这一点吗?我记得

我在用C做低级字符串工作时偶尔会用到它,但我始终无法理解它代表什么。我总是在脑海里把它说成“搅拌树皮”,但这感觉从来都不对

它没有任何其他字符串函数那样明显的词源,例如
strchr
stringcharacter)或
strspn
stringspan


我模模糊糊地记得,在某个地方读到,所有原始标准库函数都被限制为7个字符的名称,要么是为了保持与Fortran的兼容,要么是因为在原始C标准中,长度超过7个字符的标识符被认为等同于它们的7个字符前缀或其他什么。有人能证实/否认/澄清这一点吗?

我记得strpbrk代表字符串指针中断,我不记得在哪里见过它。

下面的对话建议使用“字符串指针中断”:

事实上,微软文档案例是StrPBrk,它倾向于确认单词的拆分:

最后,这证实了这一点:

strpbrk(“string pointer break”)函数与strcspn相关,只是它返回字符串中第一个字符的指针,该字符是set stopset的成员,而不是初始子字符串的长度。如果在stopset中找不到此类字符,则返回空指针

:

函数:char*strpbrk(const char *字符串,常量字符*stopset)

strpbrk(“字符串指针中断”) 功能与strcspn相关,但 它返回指向第一个 作为成员的字符串中的字符 设置为stopset而不是 初始子字符串的长度。信息技术 如果没有这样的值,则返回空指针 找到停止集中的字符

比如说,

strpbrk(“你好,世界”,“\t\n,.;!?”) =>“,世界”


函数返回一个指针,指向STOPSET(也称为BREAKSET)中的第一个字符。我心里把它理解为“对于字符串,返回指针以断开”。

至于你的另一个问题:

我隐约记得在什么地方读过书 这一切都符合原始标准 图书馆的职能仅限于 保留7个字符的名称 与Fortran兼容,或者因为 原始的C标准,标识符 超过7个字符 被认为相当于他们的 7个字符的前缀什么的。可以 有人确认/否认/澄清这一点吗

最初的ANSI C标准表示,实现定义了外部符号的有效字符数,但必须至少为6个字符(并且允许实现不区分大小写)。之所以这样做,是因为在很久以前,系统经常有这种类型的限制(无论是来自FORTRAN库、链接器限制还是其他限制)

因此,虽然您会看到外部名称比标准库中的名称长,但这些名称中没有两个以相同的6个字符序列开头


FWIW、C99将最小值增加到31个字符。C++标准(1998)表示,实现必须记录外部名称的重要性,并指出它至少有1024个字符。我知道Borland C++ 5.5对250字符的限制,特别是使用模板引起的问题。

< Pell > 1972,贝尔实验室也有一个编程语言,叫做Snobol,用于字符串操作。它有函数break()和span(),这两个函数的作用基本相同。大多数字符串函数都是根据Snobol中出现的内容建模的。查看James F.Gimpel博士写的简历和书籍

虽然每个人都在引用一些东西,但他们没有解释为什么是“字符串指针断裂”。当您在底层算法的therms中想到strpbrk时,您将能够很容易地记住它并理解它的原因,如下所示:


在扫描字符串分界符时,如果找到指针处的任何字符。

感谢您回答问题的另一半,我个人觉得这很有趣。即将提出类似的问题,然后我在这里找到了答案。你的
似乎很有创意;)我总是把它读成“strip”。对我来说,与任何其他解释一样有意义:)静态内联字符*strpbrk(const char*s,const char*accept){const char*end=s+strlen(s);const char*pos=s+strcspn(s,accept/*as reject*/);返回(pos==end)?(char*)NULL:(char pos pos;}