>  기사  >  백엔드 개발  >  C에서 `strlen`과 `sizeof`가 포인터와 배열에 대해 서로 다른 출력을 생성하는 이유는 무엇입니까?

C에서 `strlen`과 `sizeof`가 포인터와 배열에 대해 서로 다른 출력을 생성하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-01 03:03:021050검색

Why Do `strlen` and `sizeof` Produce Different Outputs for Pointers and Arrays in C?

포인터 및 배열 초기화로 인해 Strlen 및 Sizedof의 출력이 다름

C 프로그래밍에서 sizeof 및 strlen 함수는 크기 및 크기에 대한 정보를 제공합니다. 데이터 유형의 길이입니다. 그러나 포인터와 배열을 처리할 때 이러한 함수의 출력이 다를 수 있어 혼란을 초래할 수 있습니다.

다음 예를 고려하세요.

<code class="c">char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>

이 코드의 출력은 다음과 같습니다.

7 4
7 8

설명:

  • Str1(포인터 초기화): str1은 문자열 리터럴 "Sanjeev"에 대한 포인터로 초기화됩니다. sizeof(str1)은 대부분의 아키텍처에서 4바이트인 포인터의 크기를 제공합니다. 반면에 strlen(str1)은 str1이 가리키는 문자열의 길이인 7을 반환합니다(null 종결자 '' 제외).
  • Str2(배열 초기화): str2는 길이 8의 문자 배열로 초기화됩니다. sizeof(str2)는 8바이트인 널 종결자를 포함하여 이 배열의 크기를 제공합니다. 마찬가지로 strlen(str2)은 배열에 저장된 문자열의 길이(역시 7)를 반환합니다.

차이점을 더욱 명확히 하려면 다음 코드 수정을 고려하세요.

<code class="c">char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>

이 경우 출력은 다음과 같습니다.

7 4
7 8

str1과 str2가 모두 동일한 문자열을 참조하더라도 sizeof(str1)는 여전히 포인터의 크기를 반환합니다. str1은 배열의 첫 번째 요소를 가리키는 포인터인 반면 str2는 문자 배열이기 때문입니다.

위 내용은 C에서 `strlen`과 `sizeof`가 포인터와 배열에 대해 서로 다른 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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