C 프로그래밍에서 포인터와 배열을 사용하여 문자열을 초기화하면 예기치 않은 불일치가 발생할 수 있습니다. strlen 및 sizeof의 출력. 구체적인 예를 검토하여 이 현상을 분석해 보겠습니다.
제공된 코드 조각:
<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)
Array (str2)
이러한 개념을 더 자세히 설명하기 위해 코드를 약간 수정해 보겠습니다.
<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>
이 코드 strlen: 7 측면에서 str1과 str2 모두에 대해 동일한 결과를 생성합니다. 그러나 sizeof(str1)은 메모리 주소를 나타내는 4로 유지되는 반면 sizeof(str2)는 8로 조정되어 여전히 null 종료 문자를 고려합니다.
따라서 C 프로그래밍에서 문자열을 사용할 때 포인터와 배열의 고유한 데이터 유형과 크기 특성을 이해하는 것이 핵심입니다.
위 내용은 C에서 포인터와 배열 문자열 초기화에 대해 `strlen`과 `sizeof`가 다른 결과를 제공하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!