인프런 커뮤니티 질문&답변

김다훈님의 프로필 이미지

작성한 질문수

(2024) 일주일만에 합격하는 정보처리기사 실기

C언어 메모리 스페셜 (배열과 포인터)

C언어 메모리 스페셜(배열과 포인터)

해결된 질문

24.07.26 02:42 작성

·

106

0

56강 c언어 메모리스페셜(배열과 포인터) 부분1000043409.jpgHello, World! 이거 문자열 세는 코드 설명이요,메모처럼 sizeof(자료형의 크기)로 출력하라고 하면 Null까지 세고,strlen(문자열의 길이)로 출력하라고 하면 문자열까지만 세니까 출력값이 1차이 나는 거 맞나요? arr[] = "Hello, World!"int n= 0 for ( n= 0, n!=\0, n++)printf("%d", sizeofarr[]/sizeof[n]);이렇게하면 저게 어떤 자료형의 사이즈든 상관없이 일정한 사이즈로 나뉘어지니까 null값을 포함하면 14란 말씀이신거죠?strlen은 null을 안 세니까 저 코드에 sizeof 대신 넣으면 13이 나오는 거고요, 맞나요..?

답변 2

1

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 07. 26. 12:32

네 맞습니다. strlen은 널을 제외한 순수 문자열만 셉니다.

 

sizeof는 차지하고 있는 메모리 크기를 반환받고요. 그렇게 생각하시면 됩니다.

 

시간적 여유가 있으실 때 좋은 수강평 하나 부탁드립니다..!

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 26. 02:46

안녕하세요, 인프런 AI 인턴입니다.

김다훈님의 질문과 관렌된 내용이 담긴 과거 질문 중에 배열과 문자열 13:54초 출력결과 문의 라는 주제의 질문에서 유사한 주제에 대한 답변이 제공되었습니다. 이 답변에서는 strlen 함수와 sizeof 연산자의 차이점에 대해 설명하고 있으며, 문자열의 길이를 측정하는 방법과 배열의 크기를 측정하는 방법에 대해 자세히 다루고 있습니다.

질문에서 언급하신 내용과 같이, sizeof는 변수나 타입, 배열 전체의 크기를 바이트 단위로 반환합니다. 특히 문자열의 경우, 마지막에 null 문자(‘\0’)가 추가되어 있기 때문에 sizeof로 측정한 문자열의 크기는 실제 문자 개수보다 1이 더 큽니다. 반면, strlen 함수는 null 문자를 제외한 실제 문자열의 길이만을 반환합니다. 따라서 “Hello, World!” 문자열의 경우 sizeof로 측정했을 때는 14를 반환하고, strlen으로 측정했을 때는 13을 반환합니다. 이는 정확히 김다훈님이 이해하신 내용과 일치합니다.

마지막으로 배열 관련 질문으로, 코드 스니펫에서 보이는 sizeofarr[]/sizeof[n]과 관련하여, 사실상 이렇게 표현하려고 했던 것은 배열의 전체 크기를 배열의 각 요소의 크기로 나누어 배열 요소의 총 개수를 구하는 방식입니다. 문자열의 경우, sizeof(arr)/sizeof(arr[0])로 배열의 길이(문자열의 경우는 문자 개수+1)를 구할 수 있습니다.

자세한 설명이 필요한 경우, 배열과 문자열 13:54초 출력결과 문의를 참고해주세요. 이 지식공유자분의 답변이 김다훈님의 궁금증을 해결하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.