• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

9.1 명함예제 함수에 넣은 배열 값이 이상합니다

22.12.07 12:38 작성 22.12.07 12:40 수정 조회수 217

0

안녕하세요. 9.1명함 예제를 푸는 도중 char 배열에 관해 문제가 생겨 질문 드립니다.

아래에 질문 사항 있습니다.

별 20개와 글자를 각각 char array에 넣었고 space를 추가하는 내용을 함수로 만들었습니다.

그 후 space의 개수를 세기 위해 별 20개를 넣은 배열의 개수를 세어 봤습니다.

배열의 개수를 세는 방법은 강의를 보기 전인지라 sizeof 함수를 사용했습니다.

Main에서는 sizeof가 20을 반환하며 배열을 잘 읽었습니다.

sizeof는 바이트를 세는 것이니 char 20개인 배열은 sizeof가 20을 반환하는 것이 맞을 테니까요.

그런데 문제는 space를 추가하는 함수에서 발생했는데 해당 함수에서 배열을 읽을 때에는 sizeof가 4를 반환해 버린 것입니다.

space 추가하는 함수는 배열의 주소를 매개변수로 받았습니다. (char star[20]에서 star만 입력했습니다.)

해당 현상을 보면서 오만 생각이 다 들었는데 그 중 가장 합리적인 것 같은 생각은

'space 추가 함수가 배열을 읽어올 때 배열 주소 값만 읽어서 sizeof가 int를 읽은게 아닐까?' 였습니다.

int는 4바이트 이니까 그래서 4를 반환한게 아닐까 싶지만 확신을 가지진 못했습니다.

아무리 생각해도 정확한 해답을 얻을 수 없어서 질문 남깁니다.

질문 사항은 아래와 같습니다.

  1. main 함수와 추가한 함수에서 배열의 크기 값이 다른 이유는 무엇일까요?

  2. 추가한 함수에서 올바른 배열의 크기를 읽으려면 어떻게 해야 하나요?

  3. 해당 상황에서 sizeof가 4를 읽어온 이유가 무엇일까요?

- star 배열에 20개의 별을 넣은 코드

- star 배열을 함수에 입력한 방식

- space를 추가하는 함수. int a, b, c는 배열 값이 이상하게 들어가는 걸 확인해 보려고 작성한 코드입니다.

긴 글 읽어주셔서 감사합니다.

도움 주시면 감사하겠습니다 ㅠㅠ

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.12.08

혹시 전체 소스코드를 첨부해주시겠어요?

그리고 말씀하신 점을 미루어보았을 때

'space 추가 함수가 배열을 읽어올 때 배열 주소 값만 읽어서 sizeof가 int를 읽은게 아닐까?'

라는 생각이 맞는 듯 합니다.