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
吗? 我不是很确定 谢谢啦
PHP中文网2017-04-17 15:26:50
You understand correctly.
The general idea is that there is only one difference between strchrnul and strchr. strchr returns NULL when c cannot be found, and strchrnul returns the address at the end of the string.
ringa_lee2017-04-17 15:26:50
在这里提问时我也在 so 上提问了, 上面David Bowling
的回答令小白我受益颇多, 在此贴出来分享下他的回复:
The strchr() function returns a pointer to the first occurrence of a character within a string, or a null pointer if the character is not in the string. Thus, you must not dereference the return value of strchr() without first checking to see if it is a null pointer to avoid undefined behavior. Further, the return value of strchr() carries no information if the character does not occur within the string.
The strchrnul() function is different from strchr() in a couple of ways. First, while strchr() is a Standard Library function, strchrnul() is not, but is instead a GNU extension since glibc 2.1.1. You may need to define the feature test macro _GNU_SOURCE in order to enable this function. Second, while strchrnul() returns a pointer to the first occurrence of the character in the string, a pointer to the null terminator 0 is returned if the character is not in the string. Thus it is always safe to dereference the return value from strchrnul(). Further, if the character does not occur in the string, the return value contains some information in that it points to the end of the string.
About the phrase "terminating null byte": a C string is an array of chars with the special property that the last char in the string is the null byte. Of course, a char is guaranteed to have a width of one byte in C. The null byte is represented by the character literal '0', but is also sometimes called the null terminator, or the NUL terminator (though this name is really specific to the encoding, but does exist in ASCII and EBCDIC). The Standard says that:
C11 §5.2.1 2
A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string.
地址: http://stackoverflow.com/ques...