70,014
社区成员




1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
temp = dest;
while(*dest++ = *src++);
return temp;
}
3可以接受的
char * strcpy(char *dest,const char *src)
{
assert( dest != src);
assert( dest != NULL || src != NULL);
char *temp = dest;
while(*dest++ = *src++);
return temp;
}
myMemCopy(char *dest, char *source, int size)
{
int longNum = 0;
int shortNum = 0;
int charNum = 0;
longNum = size / 4;
shor5Num = (size % 4) / 2;
charNum = size % 2;
// 4字节Copy
for(int iCnt = 0; iCnt < longNum; iCnt++)
{
*(long *)dest = *(long *)source;
source = source + 4;
dest = dest + 4;
}
// 剩余2字节copy
for(int iCnt = 0; iCnt < shortNum; iCnt++)
{
*(short *)dest = *(short *)source;
source = source + 2;
dest = dest + 2;
}
// 剩余1字节Copy
for(int iCnt = 0; iCnt < charNum; iCnt++)
{
*(short *)dest = *(short *)source;
source = source + 1;
dest = dest + 1;
}
}
void * strcpy(char *dest, const char *src)
{
char *p=src;
int n=0;
while(*p!='\0') //计算源字符串长度
++n;
int dif=dest-src; //地址差
if (dif<0 || dif>n) //如果不重叠从前面复制
while (*dest++ = *src++);
else if (dif<=n) //否则从后面复制
{
for (p=src+n; p<= src; --p)
*(p+dif)=*p;
}
}
1. 读取四个字节,构成一个int
2. 判断这个int里面有没有包含c string的终结符'\0'
3. 包含的话,按byte拷贝
4. 不包含的话,按int拷贝
5. 回到1
考虑到效率可以不用作错误检查。
这就是最好的版本。