찾다

 >  Q&A  >  본문

c++ - 请问 strchrnul的这段解释的详细含义

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吗? 我不是很确定 谢谢啦

ringa_leeringa_lee2772일 전1083

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 15:26:50

    你理解的是对的。
    大意是,strchrnul跟strchr的差别只有一点,strchr在找不到c的时候返回NULL,strchrnul返回字符串末尾的地址。

    회신하다
    0
  • ringa_lee

    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...

    회신하다
    0
  • 취소회신하다