牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

strlcpy 和 strlcat 源码

来源于OpenBSD的代码.

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 == 0return 0;

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


    
/* Not enough room in dst, add NUL and traverse rest of src */
    
if (n == 0)
    
{
        
if (siz != 0)
            
*= '\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 == 0return 0;

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

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

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

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

        s
++;
    }

    
*= '\0';

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


略作了修改,增加了对空指针的判断.

posted on 2009-10-08 10:21 杨粼波 阅读(2819) 评论(1)  编辑 收藏 引用

评论

# re: strlcpy 和 strlcat 源码 2010-12-06 16:29 太极美术工程师师长

非常感谢。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理