此功能可以与两个版本的POSIX兼容吗?

JL2*_*210 4 c posix

这是以下内容的摘要strspn

#include <string.h>

size_t strspn(const char *s1, const char *s2);
Run Code Online (Sandbox Code Playgroud)

这是POSIX.1-2001的描述和返回值:

strspn()函数应计算s1指向的字符串的最大初始段的长度(以字节为单位),该长度最大部分由s2指向的字符串的字节组成。

strspn()函数应返回s1长度;没有保留返回值来指示错误。

这几乎与POSIX.1-2017相同:

strspn()函数应计算s1指向的字符串的最大初始段的长度(以字节为单位),该长度最大部分由s2指向的字符串的字节组成。

strspn()函数应返回计算出的长度;没有保留返回值来指示错误。

是否有可能strspn同时实现POSIX.1-2001和POSIX.1-2017?怎么样?

mel*_*ene 9

这是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草案。 (2认同)