c++ - 手册页中 strchrnul 的具体含义

标签 c++ c

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/

相关文章:

通用(多态)lambda 的 C++17 vector

c# - 是否有类似 Shazzam 和 Soundhood 的歌曲检测库?

C++:关于加载DLL和调用函数的一件小事

c - memcpy正确的实现方式

c++ - 如何使用 enable_if 来限制整个类(class)

c++ - 如何将 std::string 转换为 LPCSTR?

c++ - 错误的异常类型信息名称

c - 如何在C中打印ext2 super block 的s_uuid

c - 将元素插入已排序的数组中

c++ - 类构造函数是否具有未定义的行为