1. 如何实现如下copy函数,高手指教:
void memcopy(void *s,void *t, int length)
/* 要求实现内存拷贝length长度内容,源为*t,目的为*s */
希望大家讨论,看如何正确的实现!
考虑到源地址和目的地址交叉的情况:
#include <stdio.h>
#include <memory.h>
#include <string.h>
//考虑到源地址和目的地址交叉的情况
void * my_memcpy( void *dest, const void *src, size_t count )
{
unsigned char *psrc = (unsigned char*) src;
unsigned char *pdst = (unsigned char*) dest;
if (!pdst || !psrc || count <= 0)
return dest;
if (psrc < pdst) // 目的地址比源地址高,从后开始拷贝
{
psrc += count-1;
pdst += count-1;
do {
*pdst-- = *psrc--;
} while(--count);
}
else if (psrc > pdst) // 目的地址比源地址低,从前开始拷贝
{
do {
*pdst++ = *psrc++;
} while (--count);
}
return dest;
}
void main()
{
char str[50];
memset(str, 0, sizeof(str) );
strcpy(str, "1234567890");
printf("%s/n", str);
__memcpy(str, str+2, 4);
printf("%s/n", str);
memset(str, 0, sizeof(str) );
strcpy(str, "1234567890");
__memcpy(str+2, str, 4);
printf("%s/n", str);
}
2. 编写一个标准strcpy函数
char * strcpy( char *strDest, const char *strSrc )
{
char *address = strDest;
assert( (strDest != NULL) && (strSrc != NULL) );
while( *strDest++ = * strSrc++ );
return address;
}
3. strlen函数
size_t strlen( const char *str ) //输入参数const{
char *old = str;
assert( str != NULL ); //断言字符串地址非0
while( *str++ );
return str-old-1;
}