The strchrnul() function is like strchr() except that if c is not found in s, then it returns a pointer to the null byte at the end of s, rather than NULL.
this是手册页中 strchrnual 的说明。我不明白s末尾的空字节
的具体含义。
谢谢!
最佳答案
strchr()
函数返回一个指向字符串中第一次出现的字符的指针,如果该字符不在字符串中,则返回空指针。因此,在未首先检查 strchr()
返回值是否为空指针的情况下,不得取消引用它,以避免出现未定义的行为。
strchrnul()
函数在几个方面与 strchr()
不同。首先,虽然 strchr()
是标准库函数,但 strchrnul()
不是,而是自 glibc 2.1.1 以来的 GNU 扩展。您可能需要定义功能测试宏_GNU_SOURCE
才能启用此功能。其次,虽然 strchrnul()
返回一个指向字符串中第一次出现该字符的指针,但如果该字符不在字符串中,则返回一个指向空终止符 \0
的指针。字符串。因此,取消引用 strchrnul() 的返回值始终是安全的。如果该字符未出现在字符串中,则返回值指向字符串的末尾(终止空字节),并且取消引用该指针会导致值 0
。据推测,函数 strchrnul()
之所以得名,是因为该函数返回指向所查找字符的指针或指向空字节的指针。
关于短语“终止空字节”:C 字符串是一个 char
数组,其特殊属性是字符串中的最后一个 char
是空字节。当然,在 C 中 char
保证具有一个字节的宽度。空字节由字 rune 字 '\0'
表示,但有时也称为null 终止符或 NUL 终止符(虽然这个名称确实特定于编码,但确实存在于 ASCII 和 EBCDIC 中)。标准指出:
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.
关于c++ - 手册页中 strchrnul 的具体含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316188/