作者:Apollo宫保鸡丁 | 来源:互联网 | 2022-10-19 18:11
这是以下内容的摘要strspn
:
#include
size_t strspn(const char *s1, const char *s2);
这是POSIX.1-2001的描述和返回值:
strspn()函数应计算s1指向的字符串的最大初始段的长度(以字节为单位),该长度最大部分由s2指向的字符串的字节组成。
strspn()函数应返回s1的长度;没有保留返回值来指示错误。
这几乎与POSIX.1-2017相同:
strspn()函数应计算s1指向的字符串的最大初始段的长度(以字节为单位),该长度最大部分由s2指向的字符串的字节组成。
strspn()函数应返回计算出的长度;没有保留返回值来指示错误。
是否有可能strspn
同时实现POSIX.1-2001和POSIX.1-2017?怎么样?
1> melpomene..:
这是POSIX.1-2001中的错误。
正如POSIX的描述strspn
所说:
此参考页上描述的功能符合ISO C标准。这里描述的要求和ISO C标准之间的任何冲突都是无意的。IEEE Std 1003.1-2001的该卷符合ISO C标准。
和C标准(ISO 9899:1999,7.21.5.6 的strspn
功能)明确表示:
该strspn
函数返回段的长度。
较新版本的POSIX修改了措辞,使其与C标准具有相同的含义,而这始终是原定的意图。(这显然是注意到在2006年改变,见https://www.opengroup.org/austin/docs/austin_330.txt的。当前版本strspn
的POSIX是指本(而不是含糊地)为“ SD5-XSH-ERN- 182在“更改历史记录”部分中应用。)
正如POSIX所说的那样,它“遵循ISO C标准”,我认为在这种情况下(例如在这种情况下),兼容的实现必须遵循C标准。
[`strspn()`](http://pubs.opengroup.org/onlinepubs/7990989775/xsh/strspn.html)的1997年POSIX规范在同一页面上没有“遵循C标准”免责声明-但确实有错误的措词。[`strspn()`]的在线C11规范(http://port70.net/~nsz/c/c11/n1570.html#7.24.5.6)来自该标准的N1570草案。C99等效项是[`strspn()`](http://port70.net/~nsz/c/c99/n1256.html#7.21.5.6),它来自标准的N1256草案。