博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

CalmArrow

【打好基础】全力以赴,顺其自然【每天进步一点点】
  piaoxiang.cublog.cn

关于作者
姓名:CalmArrow(lqm)
职业:硕士在读
位置:山东济南
研究:嵌入式系统设计
联系:calmarrow@gmail.com

信仰:
    1、永远保持积极向上(积极的心态,积极的思考,积极的行动),享受生活给予的一切!
    2、做正确的事,正确的做事;用心去做,做到最好!
    3、如果你觉得不幸福,那么请你把幸福的门槛降低一些,不要把幸福拒之门外。。。

方向:
    在嵌入式系统设计中感兴趣的方向有:ARM、Linux、网络通信

目标:
    软硬结合,打好基础,提高学习能力,完善知识体系,建立核心优势。

方法:
    理论与实践相结合
    深度与广度相结合
    理解与记忆相结合

说明:
    本Blog仅供学习之用,转载文章如涉及版权,请通知。原创作品如转载,请注明出处。
|| << >> ||
我的分类


C标准库字符串函数:strncpy
    不使用库函数实现strncpy。
 

#if VERSION1
char *strncpy(char *dst, const char *src, size_t count)
{
        assert((dst != NULL) && (src != NULL));
        char *tmp = dst;

        while (count-- && (*dst++ = *src++) != '\0') {
                /* nothing */;
        }

        return tmp;
}
#endif

#if STD_VERSION
char *strncpy(char *dst, const char *src, size_t count)
{
        assert((dst != NULL) && (src != NULL));
        char *tmp = dst;

        while (count && (*dst++ = *src++) != '\0') {
                count--;
        }

        while (count--) {
                *dst++ = '\0';
        }

        return tmp;
}
#endif

 
    这里实现了两个版本,实际上都有使用上的不便处。
 
    版本1中,如果源串长度大于等于目的串,则复制完指定count字节后停止,不会自动添加'\0'。这时需要程序员保证count不能大于dst的长度,否则就会发生内存越界。如果源串小于目的串,则在复制完成源串后,自动结束。
 
    版本2中,如果源串长度大于等于目的串,则复制完指定count字节后停止,不会自动添加'\0'。这时需要程序员保证count不能大于dst的长度,否则就会发生内存越界。如果源串小于目的串,则在复制完成源串后,还会继续复制'\0'到dst,直到达到count的字节数。
 
   ANSI C标准库的规定中还是版本2。在使用时需要注意这些细节问题。
 
   测试驱动如下:
  
文件: strncpy.tar.gz
大小: 2KB
下载: 下载

发表于: 2007-11-02,修改于: 2007-11-19 16:09,已浏览1090次,有评论0条 推荐 投诉


网友评论
 发表评论