C 언어가 문자열 복사 함수를 실현하는 몇 가지 방법(중흥 삽입식 면접문제)

오늘 중흥 삽입식 면접에 참가하여 이 문제를 물었는데 C언어가 대학 1학년 때 배웠기 때문에 미처 보지 못했기 때문에 어쩔 수 없이 스스로 하나를 썼다.나는 다음 방법으로 썼다. c 언어에서, 그룹을 정의한 후,sizeof 명령으로 그룹의 길이를 얻을 수 있다. (요소 개수를 수용할 수 있다.)예를 들면 다음과 같습니다.

int data[4];
int length;
length=sizeof(data)/sizeof(data[0]); // , 
printf("length of data[4]=%d", length ); // length of data[4]=4

그러나 수조명 매개 변수를 하위 함수에 전달함으로써 수조의 길이를 얻는 것은 불가능하다.예를 들면 다음과 같습니다.
int getLength(int a[])
{ int length;length=sizeof(a)/sizeof(a[0]); // , 1
return length;
}

a는 함수 매개 변수이기 때문에 이 함수에 들어가면 a는 하나의 바늘(주소, 시스템이 이 함수를 실행할 때 a가 표시하는 주소가 얼마나 큰 데이터 저장 공간인지 모른다. 여기는 함수: 하나의 데이터 저장 공간의 첫 번째 주소)만 알려주기 때문에sizeof(a)의 결과는 바늘 변수 a가 메모리의 크기를 차지하고 보통 32비트에서 네 바이트이다.a[0]는 int 유형이고sizeof(a[0])도 4바이트이기 때문에 결과는 영원히 1이다.3. 따라서 수조의 길이를 얻는 것은 수조가 정의한 코드 구역에서만 상기 방법을 사용해야만 효과를 얻을 수 있다.또한 C 언어에서 성형 수조와 문자 수조의 크기는 차이가 있습니다. 성형 수조의 크기는sizeof(수조 이름)/sizeof(수조 유형)입니다.문자 그룹 크기:strlen (그룹 이름) +1, 1 은 '/0' 을 붙여야 하기 때문에 1 을 추가합니다.
다음은 정규 함수 실현 방법이다

C 언어가 문자열 복사 함수를 실현하는 몇 가지 방법

#include 
#include 

void Mystrcpy1(char *des,const char *src)
{
    assert(des != NULL && src != NULL);
    if(des==NULL && src == NULL)
    {
        return;
    }
    int i;
    for(i=0;*src!='\0';i++)
    {
        des[i]=src[i];
    }
    des[i]='\0';
}

void Mystrcpy2(char *des, const char *src)
{
    assert(des != NULL && src != NULL);
    if(des==NULL && src == NULL)
    {
        return;
    }

    while(*src!='\0')
    {
        *des=*src;
        des++;
        src++;
    }
    *des='\0';
}

void Mystrcpy3(char *des,const char *src)
{
    assert(des != NULL && src != NULL);
    if(des==NULL && src == NULL)
    {
        return;
    }
    while(*src!='\0')
    {
        *des++ = *src++;
    }
    *des='\0';
}

void Mystrcpy4(char *des,const char *src)
{

    while(*des++ = *src++);// while(*(des++)=*(src++));
}

char *Mystrcpy(char *des, char *src)
{
    char *p=des;
    while(*des++ = *src++);
    return p;
}
int main()
{
    char *str1 = "hello";
    char str2[10];
    Mystrcpy(str2,str1);
    printf("%s
"
,str2); return 0; } :hello

좋은 웹페이지 즐겨찾기