strnlen如何在C++中工作?

Jos*_*eph 1 c++ string

我很困惑如何strnlen使用非空终止的字符串在C++中工作,因为我不确定它如何计算大小.一个strlen实现很简单:

size_t strlen(char *s)
{
    size_t sz;
    while(*s++ != '\0')
    {
        ++sz;
    }
    return sz;
}
Run Code Online (Sandbox Code Playgroud)

但是你将如何实施strnlen()

gar*_*ese 9

πάνταῥεῖ的答案略短:

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,当我写这个答案时,我的代码实际上更短.现在已经没有了,因为另一篇文章已被编辑.我不认为这应该是向我投票的理由.


πάν*_*ῥεῖ 8

但是你将如何实施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)

  • 你以错误的方式进行测试。你不应该在 'max_len' 之外取消引用 s[i]。它可能不指向任何东西。 (2认同)