strlcpy 和 strlcat 源码

简介:
strlcpy.cpp
size_t strlcpy(  char *dst,  const  char *src, size_t siz )
{
    char*            d = dst;
    const char*        s = src;
    size_t            n = siz;

    if (s == 0 || d == 0) return 0;

    /* Copy as many bytes as will fit */
    if (n != 0 && --n != 0)
    {
        do
        {
            if ((*d++ = *s++) == 0)
                break;
        }
 while (--n != 0);
    }


    /* Not enough room in dst, add NUL and traverse rest of src */
    if (n == 0)
    {
        if (siz != 0)
            *d = '\0';                /* NUL-terminate dst */
        while (*s++)
            ;
    }


    return(s - src - 1);        /* count does not include NUL */
}


strlcat.cpp
size_t strlcat(  char* dst,  const  char* src, size_t siz )
{
    char*        d = dst;
    const char*    s = src;
    size_t        n = siz;
    size_t        dlen;

    if (s == 0 || d == 0) return 0;

    while (n-- != 0 && *d != '\0')
    {
        d++;
    }

    dlen = d - dst;
    n = siz - dlen;

    if (n == 0)
    {
        return(dlen + strlen(s));
    }

    while (*s != '\0')
    {
        if (n != 1)
        {
            *d++ = *s;
            n--;
        }

        s++;
    }

    *d = '\0';

    return(dlen + (s - src));
}


略作了修改,增加了对空指针的判断.
目录
相关文章
|
7月前
|
算法 NoSQL 安全
30万的源码和300的源码有什么区别?
价格差异巨大的源码(30万对300)主要区别在于质量、完整性和技术支持。高质量源码通常有清晰结构、高效算法、良好文档,提供全面的技术支持,安全稳定且来自信誉良好的开发者。而低价源码可能存在问题、缺乏文档和支持。选择时需结合实际需求,注意测试和评估。示例中的AI导诊系统和云HIS系统源码,提供完整文档、数据库和二次开发支持,适用于不同场景,能有效提升开发效率和项目质量。
30万的源码和300的源码有什么区别?
|
7月前
看源码的方法
看源码的方法
96 1
|
JavaScript
源码
源码
|
程序员 开发工具 C++
|
消息中间件 网络协议 Java
eventMesh源码学习
eventMesh源码学习
205 0
|
安全 Java
ReentranLock源码学习
线程的三大特性:原子性、可见性、有序性。也就是说满足这个三个特性的操作都是可以保证安全的,如Atomic包、volatile、通过happensBefore原则可以进行线程的安全的判断,这个依据通常是为了避免jvm指令重排。比如通常我们知道的配置信息,如果有多个线程去进行配置信息的修改,则需要进行上锁。或者多个线程修改一个变量时,此时就需要进行上锁了,或者读写分离时,可以考虑ReentrantReadWriteLock等。其本质是解决并行中的问题,将并行转成串行问题进行解决。那怎么上锁才有用呢?锁的状态大部分情况下是互斥的。当然也有特例:ReentrantReadWriteLock的读读是不会
96 0
ReentranLock源码学习
|
存储 人工智能 安全
C++学习必备——文章中含有源码
C++学习必备——文章中含有源码
121 0
C++学习必备——文章中含有源码
|
算法 NoSQL 前端开发
为什么要看源码、如何看源码,高手进阶必看
为什么要看源码、如何看源码,高手进阶必看
274 0
openFrameworks下的肤色检测源码
openFrameworks下的肤色检测源码
170 0
|
存储 Android开发 C++
看Ogrekit源码的小结
看Ogrekit源码的小结
111 0