strchrnul()函数类似于strchr(),除非c不是 在s中找到,然后它返回指向结尾的空字节的指针 s,而不是NULL。
this是手册页中strchrnual的描述。我不明白the null byte at the end of s
的具体含义。
谢谢!
答案 0 :(得分:1)
strchr()
函数返回指向字符串中第一个字符出现的指针,如果字符不在字符串中,则返回空指针。因此,如果没有先检查它是否为空指针以避免未定义的行为,则不得取消引用strchr()
的返回值。
strchrnul()
功能在几个方面与strchr()
不同。首先,虽然strchr()
是标准库函数,strchrnul()
不是,但是自glibc 2.1.1以来它是GNU扩展。您可能需要定义功能测试宏_GNU_SOURCE
才能启用此功能。其次,当strchrnul()
返回指向字符串中第一个字符出现的指针时,如果字符不在字符串中,则返回指向空终止符\0
的指针。因此,从strchrnul()
取消引用返回值总是安全的。如果字符串中没有出现该字符,则返回值指向字符串的结尾(终止空字节),并且取消引用此指针会产生值0
。假设函数strchrnul()
得名,因为函数返回指向搜索字符的指针或指向空字节的指针。
关于短语“终止空字节”:C字符串是char
的数组,其特殊属性是字符串中的最后一个char
为空字节。当然,char
保证在C中具有一个字节的宽度。空字节由字符文字'\0'
表示,但有时也称为空终止符或NUL终止符(虽然这个名称确实特定于编码,但确实存在于ASCII和EBCDIC中)。标准说:
C11§5.2.12
所有位都设置为0的字节,称为 null 字符,应存在于基本执行字符集中;它是 用于终止字符串。
答案 1 :(得分:0)
此功能非常方便地将尾随的\ n踢掉 从输入字符串:
*strchrnul(input_string,'\n') = '\0';
如果字符串中有\ n,函数将生成指向该字符的指针。 如果字符串中没有\ n,则函数生成指向字符串的指针 以\ 0结尾,并将\ 0放在\ 0上方是可以的。 (显然,这是假设字符串中的\ n不超过一个, 即适用于以\ n结尾的fgets样式的字符串。)