一天一个CRT函数 _strdup

快过年了,成都的天气不错,心情也很舒畅。

我们接着来讲,_strdup是经常用来复制字符串的函数。

1.介绍

函数签名:char *_strdup(const char *strSrc)

返回值:返回值向北复制的字符串的指针,所需空间由malloc分配并且必须手动free释放

 

2.实现

inline tChar *tStrDup(const tChar *pString)
{
tChar *pMemory = NULL;
size_t size = 0;

if( !pString )
return(NULL);

size = tStrLen(pString) + 1;

if( pMemory = static_cast(malloc(size)) )
{
tStrCopyS(pMemory, size, pString);
return pMemory;
}

return NULL;
}
其中,tStrLen位strlen的实现,tStrCopyS是strcpy_s的实现,而strcpy_s是MS提供的函数,借助了标准函数strncpy。这些函数的实现在后面的文章中会单独介绍,这里只是用到了,略过~
 
3.测试
tChar seps[]   = _T(" ,/t/n");
tChar *p = CY_CRT::tStrDup(seps);
wcout << p << endl;

free(p);

4.后记
这个函数的设计我认为并不太好,原因也很简单:可能忘记释放内存。解决方案可以是客户端申请内存,再以参数的方式传入函数。其实,用户来考虑字符串中内存的分配释放就不是好的设计,这也间接证引出std::string,自动管理内存的生存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值