zoukankan      html  css  js  c++  java
  • C strcpy和strcat

    strcpy的所谓正确写法:

    char *strcpy(char *strDestination, const char *strSource)
        {
        assert(strDestination!=NULL && strSource!=NULL);
        char *strD=strDestination;
        while ((*strDestination++=*strSource++)!='\0')
        return strD;
        }
    char *strcat(char *strDest, const char *strSrc) 
        {
        char *address = strDest;
        assert((strDest != NULL) && (strSrc != NULL));
        while(*strDest)
        {
            strDest++; 
        }
        while(*strDest++ = *strSrc++){}
        return address; 
        }

    这就是所谓的面试笔试最常见最常见的,而且经常被鄙视的strcpy
    头文件:string.h
    功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间
    说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
    返回指向dest的指针。
    好了,不说这四行代码到底为什么这么写,内事不决问百度去。
    单说函数本身,传入的是两个指针,第二个是常指针,但是一个必须满足的条件是第一个参数必须传入一个char[]数组,而不可能是一个

    char *a="fewfa";

    这样的一个指针,或者更sb的是一个空指针

    char *a;

    字符数组初始化的时候要分配长度,不分配会默认,C#还是可以再次分配,不说这个,我的意思是说,我既然要拷贝一个字符串,那我怎么知道字符串多长!10w,百千,还是更多,那这个方法是不是在某些场合不适应,还有strcat,同样的问题,参数必须是一个足够大已经分配过内存的指针,如果没有分配足够内存,会出错。

    荡漾了,写一个strcat(仅个人意见)

    #include<stdio.h>
    #include <stdlib.h>
    #include <assert.h> 
    char* strcat(char * strDest,const char * strSrc)
    {
        char *from=strDest;
        const char *source=strSrc;
    
        assert((strDest!=NULL) && (strSrc !=NULL));
        int length=0;
        while(*strDest!='\0') 
        { 
            strDest++;
            length++;
        } 
        char * ret=(char *)malloc(length);
        char *back=ret;
        while(*(from)!='\0'&&(*ret++ = *from++)) {}
        while((*ret++ = *source++)!='\0') {}
        return back; 
    } 
    
    void main()
    {
        char *a="fherweufashjewadfa";
        char *b="uiorewgfagipobagbi";
        char *c=strcat(a,b);int d=0;
        printf("%s\n",c);
        scanf("%d",d);
    }
  • 相关阅读:
    Browse information of one or more files is not available解决办法
    python中装饰器的使用
    python:匿名函数lambda
    python:列表生成式的学习
    python:列表切片知识的总结
    python:*args和**kwargs的用法
    NAT
    ACL
    三层交换技术和HSRP协议
    单臂路由与DHCP中继
  • 原文地址:https://www.cnblogs.com/fish124423/p/2616920.html
Copyright © 2011-2022 走看看