C库(2)——strnlen实现

  strnlen是strlen函数的延伸,增加了字符长度大小的限制。C库中库函数比如sprintf、strcpy等,为增加“安全性”,后面都衍生了带“n”的库函数,如snprintf、strncpy,建议使用时,都使用带“n”的库函数,防止意外情况,避免不必要的“执行bug”。strnlen函数定义如下:

size_t strnlen(const char *str, size_t maxlen);

实现方法1:数组
原理:以数组形式获取字符,并判断字符串结束符,数组下标即为字符串长度 ,增加长度大小限制。
优点:通俗易理解
源码:

int con_strlen(const char *s,int maxlen)
{
    int i = 0;      
    while (s[i++] != '\0' && (i < maxlen))
        ;
    return i;
}

实现方法2:指针
原理:以指针方式,定义一个临时指针变量,移动字符并判断结束符;增加长度大小限制;最后临时指针移动的地址长度即是字符串长度。
优点:-
源码:

int con_strnlen(const char *s,int maxlen)
{
    const char *p;

    for (p = s; *p != '\0' && ((p - s) < maxlen); ++p)
        ;

    return (p - s)
}

实现方法3:递归
原理:递归 ,增加长度大小限制。
优点:递归除了好理解,剩下都是缺点(压栈占资源)?
源码:

int con_strnlen(const char *s,int maxlen)
{
    if(*s != '\0' && (maxlen > 0))
    {
        return (1+con_strlen(s+1,maxlen-1));
    }
    return 0;
}
posted @ 2018-02-28 23:25  Acuity  阅读(504)  评论(0)    收藏  举报