我很困惑如何strnlen使用非空终止的字符串在C++中工作,因为我不确定它如何计算大小.一个strlen实现很简单:
size_t strlen(char *s)
{
size_t sz;
while(*s++ != '\0')
{
++sz;
}
return sz;
}
Run Code Online (Sandbox Code Playgroud)
但是你将如何实施strnlen()?
比πάνταῥεῖ的答案略短:
size_t strnlen(const char * s, size_t len) {
size_t i = 0;
for ( ; i < len && s[i] != '\0'; ++i);
return i;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
为了澄清未来的读者和可能的downvoters,当我写这个答案时,我的代码实际上更短.现在已经没有了,因为另一篇文章已被编辑.我不认为这应该是向我投票的理由.
但是你将如何实施
strnlen()?
像这样:
size_t strnlen(const char *s, size_t max_len)
{
size_t i = 0;
for(; (i < max_len) && s[i]; ++i);
return i;
}
Run Code Online (Sandbox Code Playgroud)