>  기사  >  백엔드 개발  >  C 언어에서 sizeof와 strlen의 차이점은 무엇입니까

C 언어에서 sizeof와 strlen의 차이점은 무엇입니까

王林
王林원래의
2020-11-20 10:04:187941검색

C 언어에서 sizeof와 strlen의 차이점은 다음과 같습니다. strlen은 지정된 문자열 str의 길이를 계산하는 데 사용되는 함수이지만 끝 문자(예: null 문자)를 포함하지 않으며 sizeof는 단항 연산자가 아닙니다. 기능.

C 언어에서 sizeof와 strlen의 차이점은 무엇입니까

차이 분석:

strlen은 지정된 문자열 str의 길이를 계산하는 데 사용되는 함수이지만 끝 문자(예: null 문자)를 포함하지 않습니다. 해당 프로토타입은 다음 코드에 표시됩니다.

size_t strlen(char const* str);

strlen은 함수이므로 함수 호출이 필요합니다. 호출 예제는 다음 코드에 표시됩니다.

char sArr[] = "ILOVEC";
/*用strlen()求长度*/
printf("sArr的长度=%d\n", strlen(sArr));

분명히 위 예제 코드의 실행 결과는 다음과 같습니다. 6(종료 널 문자가 포함되지 않기 때문). 여기서 특별한 주의가 필요한 것은 strlen 함수가 size_t 유형의 값을 반환하므로 다음 샘플 코드에서 볼 수 있듯이 프로그램이 예상치 못한 결과를 초래할 수 있다는 것입니다.

/*判断一*/
if(strlen(x)>= strlen(y))
{
}
/*判断二*/
if(strlen(x)- strlen(y)>= 0)
{
}

표면적으로는 위의 두 가지 판단 표현은 정확히 동일하지만 그렇지 않습니다. 그 중 식 1을 판단하는 데는 아무런 문제가 없으며 프로그램은 예상대로 정확하게 작동할 수 있지만, 식 2를 판단한 결과는 항상 다릅니다.

이유는 간단합니다. strlen 함수의 반환 결과는 size_t 유형(즉, 부호 없는 정수 유형)이고 size_t 유형은 음수가 될 수 없기 때문입니다. 따라서 "if(strlen(x)-strlen(y)>=0)"이라는 진술은 항상 참입니다.

마찬가지로 표현식에 부호 있는 정수와 부호 없는 정수가 모두 포함되어 있어도 다음 코드와 같이 예기치 않은 결과가 계속 발생할 수 있습니다.

/*判断一*/
if(strlen(x)>= 5)
{
}
/*判断二*/
if(strlen(x)- 5>=0)
{
}

분명히 표현식 2를 판단한 결과는 다음과 같은 이유로 항상 True입니다. 위에.

키워드 sizeof는 함수가 아닌 단항 연산자입니다. strlen 함수와 달리 해당 매개변수는 다음 샘플 코드에 표시된 것처럼 배열, 포인터, 유형, 개체, 함수 등이 될 수 있습니다.

char sArr[] = "ILOVEC";
/*用sizeof求长度*/
printf("sArr的长度=%d\n", sizeof(sArr));

함수 strlen과 관련하여 여기 샘플 코드는 7의 결과로 실행됩니다. (끝 문자가 null이기 때문입니다.) 동시에 sizeof의 경우 버퍼가 알려진 문자열로 초기화되었기 때문에 길이가 고정되어 있으므로 sizeof는 컴파일 타임에 버퍼의 길이를 계산합니다. 이는 컴파일 타임에 계산되기 때문에 sizeof를 사용하여 동적으로 할당된 메모리 공간의 크기를 반환할 수 없습니다.

관련 권장 사항: C#.Net 개발 그래픽 튜토리얼

위 내용은 C 언어에서 sizeof와 strlen의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.