几个库函数实现 (memmove memcopy...)
2011-01-24 17:41:43| 分类: 每日一题 | 标签: |字号大中小 订阅
库函数的手册中明确说了
memmove考虑内存区域重叠的情况而memcpy不考虑,所以memcpy实现起来比较简单。一般面试者要求实现 memcpy的时候都是看你考虑的是否全面。下面是一个memmove的实现:
再来看Linux中实现:
- void *memmove(void *dest, void const *src, size_t n)
- {
- register char *dp = dest;
- register char *sp = dest;
- if (dp < sp)
- {
- while(n-- > 0)
- *dp++ = *sp++;
- }
- else
- {
- // we should do the copy reversely
- dp += n;
- sp += n;
- while (n-- > 0)
- *--dp = *--sp;
- }
- }
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
int strcmp ( const char * src, const char * dst ) { int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else if ( ret > 0 ) ret = 1 ; return( ret ); } strcpy实现char* strcpy(char* dest, const char* src) { char* tmp = dest; while ((*tmp++ = *src++) != '\0') ; return dest; }