C 언어가 문자열 복사 함수를 실현하는 몇 가지 방법(중흥 삽입식 면접문제)
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