在man page中strchrnul的具体含义

时间:2017-02-18 14:09:08

标签: c++ c

  

strchrnul()函数类似于strchr(),除非c不是          在s中找到,然后它返回指向结尾的空字节的指针          s,而不是NULL。

this是手册页中strchrnual的描述。我不明白the null byte at the end of s的具体含义。

谢谢!

2 个答案:

答案 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样式的字符串。)