一天一个CRT函数 _memccpy

这里,需要声明下,我是从MSDN的CRT分类开始的。因为CRT包括20来个子分类,很多都和系统关联太紧,所以我主要选择了几个分类(Buffer ManipulationData ConversionString manipulationArgument Access)来进行学习。

开始我们的学习吧!就先从Buffer Manipulation开始,Let‘s Go!

一、Buffer Manipulation

这个分类的各函数是以内存区内字节的形式进行处理的。我们会讨论到以下函数

函数作用
_memccpy将一个缓冲区的字符复制到另一个给定字符之前或已复制指定数目的字符的目标内存区
memchr在一个内存区查找指定字符,返回指针指到所匹配的第一个目标缓冲区中的字符
memcmp比较指定的两个缓冲区中的字符数
memcpy将从一个缓冲区中的指定的数量的字符复制到另一个
memmove将从一个缓冲区中的指定的数量的字符复制到另一个,保证没有内存重叠
memset使用给定字符来初始化指定的缓冲区中的字节数
_swap交换字节的数据并将其存储在指定位置

 

1._memccpy

实现:

/****
copy bytes until character found

Purpose:
Copies bytes from src to dest until count bytes have been
copied, or up to and including the character _c, whichever
comes first.

Entry:
T *dest - pointer to memory to receive copy
T *src - source of bytes
T _c - character to stop copy at
unsigned int count - max number of bytes to copy

Exit:
returns pointer to byte immediately after _c in dest
returns NULL if _c was never found

Uses:

Exceptions:

****/

template<typename T>
inline T *tMemCCpy(T *pDest, T *pSrc, T _c, unsigned int uMaxCount)
{
while( uMaxCount && (*pDest++ = *pSrc++) != _c )
uMaxCount--;

return(uMaxCount ? pDest : NULL);
}


测试:
  
  

#ifdef _UNICODE
typedef wchar_t tChar;
typedef wchar_t* tPtrChar;
#else
typedef char tChar;
typedef char* tPtrChar;
#endif


tChar string1[60] = _T("The quick brown dog jumps over the lazy fox");

tChar buffer[61] = {0};
tChar *pdest = NULL;

int nStart = 0;

{
QPerformanceTimer last(nStart); // 对GetTicketCount的封装
for(DWORD i = 0; i < 10000; ++i)
{
pdest = (tChar *)CY_CRT::tMemCCpy( buffer, string1, _T('s'), 60 );
}
}

std::cout << nStart << std::endl;

*pdest = '/0';

std::wcout << buffer << std::endl;


相似函数:memcpy、strcpy、strncpy

后记:该函数M$是用汇编实现的,效率比我的实现高出太多了~就不贴比试结果了    ~-_-~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值