Sizeof 와 Strlen 의 차이 점 및 연계 에 대한 상세 한 설명

4530 단어 sizeofstrlen
사이즈    sizeof(...)는 연산 자 입 니 다.헤더 파일 에서 type:def 는 unsigned int 입 니 다.그 값 은 컴 파일 할 때 계산 되 었 습 니 다.매개 변 수 는 배열,지침,유형,대상,함수 등 이 될 수 있 습 니 다.    그것 의 기능 은 세 워 진 최대 대상 을 수용 할 수 있 는 바이트 크기 를 확보 하 는 것 이다.    컴 파일 할 때 계산 하기 때문에 sizeof 는 동적 으로 분 배 된 메모리 공간의 크기 를 되 돌려 줄 수 없습니다.실제 크기 of 로 유형 과 정적 분 배 된 대상,구조 또는 배열 이 차지 하 는 공간 을 되 돌려 주 고 반환 값 은 대상,구조,배열 이 저장 하 는 내용 과 관계 가 없습니다.    구체 적 으로 말 하면 매개 변수 가 다음 과 같 을 때 size of 가 되 돌아 오 는 값 은 다음 과 같은 의 미 를 나타 낸다.    배열―컴 파일 할 때 분 배 된 배열 공간 크기;    지침―이 지침 에 사용 되 는 공간 크기 를 저장 합 니 다(이 지침 을 저장 하 는 주소 의 길 이 는 길이 가 길 고 정형 이 며 4 여야 합 니 다).    유형―이 유형 이 차지 하 는 공간 크기;    대상―대상 의 실제 점용 공간 크기;    함수-함수 의 반환 유형 이 차지 하 는 공간 크기.함수 의 반환 유형 은 void 일 수 없습니다.*****************
strlen    strlen(...)은 함수 입 니 다.실행 할 때 만 계산 할 수 있 습 니 다.매개 변 수 는 문자 포인터(char*)여야 합 니 다.배열 이름 이 매개 변수 로 들 어 왔 을 때 실제 배열 은 포인터 로 퇴화 되 었 다.    문자열 의 길 이 를 되 돌려 주 는 기능 입 니 다.이 문자열 은 자신 이 정의 한 것 일 수도 있 고 메모리 에 무 작위 로 있 을 수도 있 습 니 다.이 함수 가 실제 완성 한 기능 은 이 문자열 을 대표 하 는 첫 번 째 주소 부터 옮 겨 다 니 며 끝 문자 NULL 을 만 날 때 까지 입 니 다.돌아 오 는 길이 의 크기 는 NULL 을 포함 하지 않 습 니 다.*********************
3.예 를 들 면:    eg1、char arr[10] = "What?";              int len_one = strlen(arr);              int len_two = sizeof(arr);               cout << len_one << " and " << len_two << endl;     출력 결과:5 and 10    평가:sizeof 가 arr 배열 을 정의 할 때 컴 파일 러 가 분 배 된 배열 공간 크기 를 되 돌려 주 고 그 안에 얼마나 많은 데 이 터 를 저장 하 는 지 에 관심 이 없습니다.strlen 은 저 장 된 데이터 내용 에 만 관심 을 가지 고 공간의 크기 와 유형 에 관심 을 가지 지 않 습 니 다.
    eg2、char * parr = new char[10];              int len_one = strlen(parr);              int len_two = sizeof(parr);              int len_three = sizeof(*parr);              cout << len_one << " and " << len_two << " and " << len_three << endl;    출력 결과:23 and 4 and 1    평가:첫 번 째 출력 결과 23 은 실제 적 으로 매번 실 행 될 때마다 다 를 수 있 습 니 다.이것 은 parr 에 무엇이 저장 되 어 있 는 지 에 달 려 있 습 니 다(parr[0]부터 첫 번 째 NULL 이 끝 난 것 을 알 고 있 습 니 다).두 번 째 결 과 는 실제 적 으로 parr 가 가리 키 는 동적 메모리 공간의 크기 를 계산 하려 는 것 이 었 으 나 뜻 대로 되 지 않 았 다.size of 는 parr 가 문자 포인터 라 고 생각 하기 때문에 이 포인터 가 차지 하 는 공간(포인터 의 저장 소 는 긴 정형 을 사용 하기 때문에 4)을 되 돌려 주 었 다.세 번 째 결 과 는*parr 가 가리 키 는 주소 공간 에 저 장 된 문 자 를 대표 하기 때문에 길 이 는 1 입 니 다.***********************
4.참고 자료:Sizeof 와 Strlen 의 차이 와 관계(전환)
1.sizeof 연산 자의 결과 유형 은 sizet,헤더 파일 에서 type:def 는 unsigned int 형식 입 니 다.이 유형 은 만들어 진 최대 대상 을 수용 할 수 있 는 바이트 크기 를 보장 합 니 다.
2.sizeof 는 연산 자 이 고 strlen 은 함수 입 니 다.
3.sizeof 는 유형 으로 매개 변 수 를 만 들 수 있 습 니 다.strlen 은 char*로 만 매개 변 수 를 만 들 수 있 고'\0'으로 끝나 야 합 니 다.sizeof 는 함수 로 매개 변 수 를 만 들 수 있 습 니 다.예 를 들 어 short f();printf("%d", sizeof(f())); 출력 결 과 는 sizeof(short),즉 2 입 니 다.
4.배열 이 sizeof 를 만 드 는 매개 변 수 는 퇴화 되 지 않 고 strlen 에 전달 하면 지침 으로 퇴화 된다.
5.대부분의 컴 파일 러 는 컴 파일 할 때 size of 를 유형 이나 변수의 길 이 를 계산 했다.이것 이 바로 size of(x)가 배열 의 위 수 를 정의 할 수 있 는 원인 char str[20]="0123456789"이다.int a=strlen(str); //a=10; int b=sizeof(str); //b=20;
6.strlen 의 결 과 는 실 행 될 때 만 계산 할 수 있 으 며,문자열 의 길 이 를 계산 하 는 데 사 용 됩 니 다.형식 이 메모리 의 크기 를 차지 하 는 것 이 아 닙 니 다.
7.sizeof 이후 유형 이 라면 괄호 를 넣 어야 합 니 다.변수 이름 이 라면 괄호 를 넣 지 않 아 도 됩 니 다.이것 은 sizeof 가 조작 부호 이기 때문에 함수 가 아 닙 니 다.
8.하나의 구조 유형 에 적용 되 었 을 때 또는 변수,sizeof 는 실제 크기 로 되 돌아 갑 니 다.정적 공간 배열,sizeof 는 모든 배열 의 사 이 즈 를 반환 합 니 다.sizeof 연산 자 는 동적 으로 분 배 된 배열 이나 외부 배열 의 사 이 즈 를 되 돌 릴 수 없습니다.
9.배열 은 매개 변수 로 함수 에 전달 할 때 배열 이 아 닌 지침 을 전달 합 니 다.배열 의 첫 번 째 주 소 를 전달 합 니 다.예 를 들 어 fun(char[8])fun(char[])은 모두 fun(char*)과 같 습 니 다.C+에서 매개 변수 전달 배열 은 배열 의 첫 번 째 요 소 를 가리 키 는 지침 입 니 다.컴 파일 러 는 배열 의 크기 를 모 릅 니 다.함수 에서 배열 의 크기 를 알 고 싶다 면.이렇게 해 야 합 니 다:함수 에 들 어간 후 memcpy 로 복사 합 니 다.길 이 는 다른 형태 로 fun(unsiged char*p1,int len){unsigned char*buf=new unsigned char[len+1]memcpy(buf,p1,len)를 전달 합 니 다.}
우 리 는 sizeof 와 strlen 을 자주 사용 할 수 있 을 때 보통 문자열 배열 의 길 이 를 계산 하여 위의 상세 한 설명 을 보 았 는데 이들 의 사용 이 아직도 차이 가 있다 는 것 을 발견 했다.이 예 에서 잘 볼 수 있다.
char str[20]="0123456789"; int a=strlen(str); //a=10; >>>> strlen 은 문자열 의 길 이 를 계산 하여 끝 문자 0x 00 을 문자열 로 끝 냅 니 다.int b=sizeof(str); //그리고 b=20;>>>sizeof 는 분 배 된 배열 str[20]이 차지 하 는 메모리 공간의 크기 를 계산 하여 안에 저 장 된 내용 의 변 화 를 받 지 않 습 니 다.
위 는 정적 배열 에 대한 처리 결과 입 니 다.포인터 라면 결 과 는 다 릅 니 다.
char* ss = "0123456789"; sizeof(ss)결과 4===ss 는 문자열 상수 의 문자 지침 을 가리 키 며,sizeof 는 포인터 가 차지 하 는 공간 을 얻 었 을 것 이다.
긴 정형 이기 때문에 4 sizeof(*ss)결과 1====*ss 는 첫 번 째 문자 로 문자열 의 첫 번 째'0'이 차지 하 는 메모리 공간 을 얻 었 고 char 류 입 니 다.
1 위
strlen(ss)=10>>>>>이 문자열 의 길 이 를 얻 으 려 면 strlen 을 사용 해 야 합 니 다.

좋은 웹페이지 즐겨찾기