strcpy 订阅
strcpy,即string copy(字符串复制)的缩写。strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。 展开全文
strcpy,即string copy(字符串复制)的缩写。strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。
信息
外文名
strcpy
返回值类型
char*
头文件
string.h
中文名
字符串复制函数
功    能
字符串复制
strcpy简介
在C语言函数中: 原型声明:char *strcpy(char* dest, const char *src);头文件:#include 和 #include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
收起全文
精华内容
下载资源
问答
  • strcpy

    千次阅读 2019-09-27 17:53:55
    strcpy函数的重写

    C标准库

    #include<stddef.h>
    #include<string.h>
    
    #undef strcpy
    
    #ifndef STRCPY
    	#define STRCPY strcpy
    #endif
    
    /* 该函数是把src中的内容复制到dest中*/
    char* STRCPY(char* dest,const char *src)
    {
    	return memcpy(dest,src,strlen(src) + 1);
    }
    

    #include<string.h>
    #include<memcopy.h>
    
    #undef memcpy
    
    void *memcpy (void *dstpp, const void *srcpp, size_t len)
    {
      unsigned long int dstp = (long int) dstpp;
      unsigned long int srcp = (long int) srcpp;
    
      /* Copy from the beginning to the end.  */
    
      /* If there not too few bytes to copy, use word copy.  */
      if (len >= OP_T_THRES)
        {
          /* Copy just a few bytes to make DSTP aligned.  */
          len -= (-dstp) % OPSIZ;
          BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ);
    
          /* Copy whole pages from SRCP to DSTP by virtual address manipulation,
    	 as much as possible.  */
    
          PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len);
    
          /* Copy from SRCP to DSTP taking advantage of the known alignment of
    	 DSTP.  Number of bytes remaining is put in the third argument,
    	 i.e. in LEN.  This number may vary from machine to machine.  */
    
          WORD_COPY_FWD (dstp, srcp, len, len);
    
          /* Fall out and copy the tail.  */
        }
    
      /* There are just a few bytes to copy.  Use byte memory operations.  */
      BYTE_COPY_FWD (dstp, srcp, len);
    
      return dstpp;
    }
    

    重写实现

    char* STRCPY(char* dest,const char *src)
    {
    	char *dst = dest;       //
    	if(dest==NULL | src == NULL)
    	{
    		printf("\r\n输入的指针是空指针\r\n");
    		return 0;
    	}
    	
    	/*指针不断的增加,src不断的给dest赋值,直到把'\0'赋值给dest,跳出循环*/
    	while((*dest++ = *src++)!='\0');
    	return dst;
    }
    
    展开全文
  • strcpy

    2010-03-16 11:32:00
    From: http://blog.csdn.net/btooth/archive/2006/08/05/1023773.aspx 题目:已知strcpy函数的原型是:char * strcpy...1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char *

    From: http://blog.csdn.net/btooth/archive/2006/08/05/1023773.aspx

     

    题目:
    已知strcpy函数的原型是:
    char * strcpy(char * strDest,const char * strSrc);
    1.不调用库函数,实现strcpy函数。
    2.解释为什么要返回char *。

    解说:
    1.strcpy的实现代码
    char * strcpy(char * strDest,const char * strSrc)
    {
    if ((strDest==NULL)||(strSrc==NULL)) //[1]
    throw "Invalid argument(s)"; //[2]
    char * strDestCopy=strDest; //[3]
    while ((*strDest++=*strSrc++)!='/0'); //[4]
    return strDestCopy;
    }
    错误的做法:
    [1]
    (A)不检查指针的有效性,说明答题者不注重代码的健壮性。
    (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false三个关键字以提供更安全的条件表达式。
    (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。
    [2]
    (A)return new string("Invalid argument(s)");,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。
    (B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。
    [3]
    (A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。
    [4]
    (A)循环写成while (*strDest++=*strSrc++);,同[1](B)。
    (B)循环写成while (*strSrc!='/0') *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上'/0'。
    2.返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。 链式表达式的形式如:
    int iLength=strlen(strcpy(strA,strB));
    又如:
    char * strA=strcpy(new char[10],strB);
    返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/btooth/archive/2006/08/05/1023773.aspx

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,335
精华内容 7,734
热门标签
关键字:

strcpy