84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
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...