c++ - 请问 strchrnul的这段解释的详细含义
ringa_lee
ringa_lee 2017-04-17 15:24:50
[C++讨论组]

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_lee
ringa_lee

ringa_lee

全部回复(2)
PHP中文网

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

ringa_lee

在这里提问时我也在 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...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号