找回密码
 入驻
搜索
查看: 131059|回复: 2

完美strcpy进化论

[复制链接]
发表于 2006-11-10 16:26:48 | 显示全部楼层 |阅读模式
库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:

  2分
void strcpy( char *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}
  4分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}
  7分
void strcpy(char *strDest, const char *strSrc)
{
 //对源地址和目的地址加非0断言,加3分
 assert( (strDest != NULL) && (strSrc != NULL) );
 while( (*strDest++ = * strSrc++) != ‘\0’ );
}
  10分
//为了实现链式操作,将目的地址返回,加3分!

char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0’ );
  return address;
}
  从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!

csdn众:

wanfustudio(雁南飞:雁无留踪之意,水无取影之心)
/***
*strncpy.c - copy at most n characters of string
*
*       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines strncpy() - copy at most n characters of string
*
*******************************************************************************/
char * __cdecl strcpy (
        char * dest,
        const char * source,

        )
{
        char *start = dest;

        while (*dest++ = *source++)    /* copy string */
                ;

        *dest++ = '\0';

        return(start);
}

char * __cdecl strncpy (
        char * dest,
        const char * source,
        size_t count
        )
{
        char *start = dest;

        while (count && (*dest++ = *source++))    /* copy string */
                count--;

        if (count)                              /* pad out with zeroes */
                while (--count)
                        *dest++ = '\0';

        return(start);
}

triace_zhang(『雪梨码头』做个编译器好难)  

   char* mystrcpy(char* dest,const char* src)
{
    if ( ( dest == NULL) || ( src == NULL ) )
        throw "Error: Empty Pointer(s) ";
  char* p = dest;
  while ((*dest++ = *src++) != '\0');
  return p;
}

guohui4321(<看看海吹吹风>)
char* mystrcpy(char* dest,const char* src)
{
    if ( src == NULL )
        return dest;

  char* p = dest;
  while ((*dest++ = *src++) != '\0');
  return p;
}

zkkpkk(菜鸟爱GDI)
char* strcpy(char* dest,const char* source)
{
        if(*source == '\0')
        {
                *dest = '\0';
                return dest;
        }
        char* address = dest;
    while((*dest++ = *source++) != '\0');
    return address;
}
发表于 2006-11-14 20:26:49 | 显示全部楼层
你与朋友聚赌赢了 91 思明论坛,热心值减 2

   下次努力哦!……
日............是你自己写的吗1
........................!!
回复

使用道具 举报

 楼主| 发表于 2006-11-14 20:32:50 | 显示全部楼层
不幸的你遭到暴徒洗劫!掳去了你 1/4的现金 !(人民政府再次提醒大家有钱要存银行)

   下次努力哦!……
原帖由 A_Fenzai 于 2006-11-14 20:26 发表
日............是你自己写的吗1
........................!!

char* strcpy(char* dest,const char* source)
{
        if(*source == '\0')
        {
                *dest = '\0';
                return dest;
        }
        char* address = dest;
    while((*dest++ = *source++) != '\0');
    return address;
}

这段......:L
你没看到很多人的版本都有吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入驻

本版积分规则

QQ|Archiver|手机版|小黑屋|思明论坛

GMT+8, 2024-6-3 01:37 , Processed in 0.069784 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表