The strchrnul() function is like strchr() except that if c is notfound in s, then it returns a pointer to the null byte at the end of s, rather than NULL.
这是这里的man page对 strchrnul 的解释. 其中the null byte at the end of s就是指 c 字符串最后的那个\0吗? 我不是很确定 谢谢啦
the null byte at the end of s
\0
ringa_lee
你理解的是对的。大意是,strchrnul跟strchr的差别只有一点,strchr在找不到c的时候返回NULL,strchrnul返回字符串末尾的地址。
在这里提问时我也是这么上提问了,上面David Bowling的回答令小白我受益人多,在此贴出来分享下他的回复:
David Bowling
strchr() 函数返回一个指向字符串中第一次出现的字符的指针,如果该字符不在字符串中,则返回空指针。因此,在未首先检查 strchr() 的返回值是否为空指针的情况下,不得取消引用它,以避免出现未定义的行为。此外,如果字符串中没有出现该字符,则 strchr() 的返回值不包含任何信息。
strchrnul() 函数在几个方面与 strchr() 不同。首先,虽然 strchr() 是标准库函数,但 strchrnul() 不是,而是自 glibc 2.1.1 以来的 GNU 扩展。您可能需要定义功能测试宏 _GNU_SOURCE 才能启用此功能。其次,虽然 strchrnul() 返回指向字符串中第一次出现的字符的指针,但如果该字符不在字符串中,则返回指向空终止符 0 的指针。因此,取消引用 strchrnul() 的返回值始终是安全的。此外,如果该字符没有出现在字符串中,则返回值包含一些信息,因为它指向字符串的末尾。
关于短语“终止空字节”:C 字符串是一个字符数组,其特殊属性是字符串中的最后一个字符是空字节。当然,在 C 中,保证 char 的宽度为一个字节。空字节由字符文字“0”表示,但有时也称为空终止符或 NUL 终止符(尽管这个名称确实很具体)编码,但确实存在于 ASCII 和 EBCDIC 中)。标准规定:
C11 §5.2.1 2所有位都设置为 0 的字节,称为空字符,应存在于基本执行字符集中;它用于终止字符串。
地址:http://stackoverflow.com/ques...
你理解的是对的。
大意是,strchrnul跟strchr的差别只有一点,strchr在找不到c的时候返回NULL,strchrnul返回字符串末尾的地址。
在这里提问时我也是这么上提问了,上面
David Bowling
的回答令小白我受益人多,在此贴出来分享下他的回复:strchrnul() 函数在几个方面与 strchr() 不同。首先,虽然 strchr() 是标准库函数,但 strchrnul() 不是,而是自 glibc 2.1.1 以来的 GNU 扩展。您可能需要定义功能测试宏 _GNU_SOURCE 才能启用此功能。其次,虽然 strchrnul() 返回指向字符串中第一次出现的字符的指针,但如果该字符不在字符串中,则返回指向空终止符 0 的指针。因此,取消引用 strchrnul() 的返回值始终是安全的。此外,如果该字符没有出现在字符串中,则返回值包含一些信息,因为它指向字符串的末尾。
关于短语“终止空字节”:C 字符串是一个字符数组,其特殊属性是字符串中的最后一个字符是空字节。当然,在 C 中,保证 char 的宽度为一个字节。空字节由字符文字“0”表示,但有时也称为空终止符或 NUL 终止符(尽管这个名称确实很具体)编码,但确实存在于 ASCII 和 EBCDIC 中)。标准规定:
C11 §5.2.1 2
所有位都设置为 0 的字节,称为空字符,应存在于基本执行字符集中;它用于终止字符串。
地址:http://stackoverflow.com/ques...