책 내용 질문하기
212페이지 진법변환 c코드 관련
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
212
조회수
532
작성일
2019-04-02
작성자
탈퇴*원
첨부파일

char a[11]이던데 왜 a[11]인가요?

답변
2019-04-03 10:41:54

안녕하세요 길벗수험서 운영팀입니다.

 

문자 배열 a가 10자를 받아들이기 때문에 끝자리 표시자인 널문자('\0')가 들어갈 자리를 확보해줘야 하기 때문입니다.

 

C언어의 경우 문자열을 처리할 때, 배열을 이용합니다.

char c[] = "korea";

위와 같이 저장했을 때, 단순히 생각하면 배열 c는 k,o,r,e,a의 5글자인 5개의 배열요소로 생성되었다고 생각할 것입니다.

 

하지만 실제 배열 요소들에 저장된 것을 확인하면,

 

 

c[0]

c[1]

c[2]

c[3]

c[4]

c[5]

k

o

r

e

a

\0

 

위와 같이 저장됩니다. 0~5인 총 6개의 배열요소를 사용하게 되죠.

 

널문자(\0)는 프로그램이 어디까지를 문자열로 인식하느냐의 기준을 나타냅니다.

예를 들어, printf("%s",c) 로 배열 c를 출력하다면, 차례대로 c[0]부터 출력하여 c[5]의 \0을 만나는 순간까지 모두 출력하게 되죠.

 

이렇게 볼 수도 있습니다.

char c[20] = "korea";

이 경우 0~5까지 위의 표와 똑같이 들어가겠죠. 나머지는 정의되지 않은 값(undefined value)이 들어가 있을 겁니다.

이것을 똑같이 printf("%s",c)로 출력하면 c[0]~c[20]의 모든 요소들이 아닌 \0까지의 값인 korea만이 출력되게 됩니다.

 

 

문자열을 배열로 처리할 때 항상 문자열의 마지막에는 \0이 들어갈 공간을 확보해야 한다는 점을 염두에 두세요.

 

행복한 하루되세요 :)

  • 관리자
    2019-04-03 10:41:54

    안녕하세요 길벗수험서 운영팀입니다.

     

    문자 배열 a가 10자를 받아들이기 때문에 끝자리 표시자인 널문자('\0')가 들어갈 자리를 확보해줘야 하기 때문입니다.

     

    C언어의 경우 문자열을 처리할 때, 배열을 이용합니다.

    char c[] = "korea";

    위와 같이 저장했을 때, 단순히 생각하면 배열 c는 k,o,r,e,a의 5글자인 5개의 배열요소로 생성되었다고 생각할 것입니다.

     

    하지만 실제 배열 요소들에 저장된 것을 확인하면,

     

     

    c[0]

    c[1]

    c[2]

    c[3]

    c[4]

    c[5]

    k

    o

    r

    e

    a

    \0

     

    위와 같이 저장됩니다. 0~5인 총 6개의 배열요소를 사용하게 되죠.

     

    널문자(\0)는 프로그램이 어디까지를 문자열로 인식하느냐의 기준을 나타냅니다.

    예를 들어, printf("%s",c) 로 배열 c를 출력하다면, 차례대로 c[0]부터 출력하여 c[5]의 \0을 만나는 순간까지 모두 출력하게 되죠.

     

    이렇게 볼 수도 있습니다.

    char c[20] = "korea";

    이 경우 0~5까지 위의 표와 똑같이 들어가겠죠. 나머지는 정의되지 않은 값(undefined value)이 들어가 있을 겁니다.

    이것을 똑같이 printf("%s",c)로 출력하면 c[0]~c[20]의 모든 요소들이 아닌 \0까지의 값인 korea만이 출력되게 됩니다.

     

     

    문자열을 배열로 처리할 때 항상 문자열의 마지막에는 \0이 들어갈 공간을 확보해야 한다는 점을 염두에 두세요.

     

    행복한 하루되세요 :)

  • 관리자
    2019-04-04 10:04:20

    안녕하세요 길벗수험서 운영팀입니다.

     

    음.. 무언가 혼동하고 계신 것 같습니다.

     

    char a[10]을 선언한다는 것은

    a[0]~a[9]까지의 10개의 요소를 사용하겠다는 의미입니다.

     

    a[0]~a[10]까지 11개의 요소를 사용하겠다는 것이 아닙니다.

    이렇게 사용하기 위해서는 a[11]을 선언했어야 합니다.

    마찬가지로 12개의 요소를 사용하기 위해서는 a[12]를 선언해서 a[0]~a[11]을 사용하면 되겠죠.

     

    행복한 하루되세요 :)

  • *
    2019-04-03 11:02:05

    답변 보니 얼추 이해는 가는데 하나 더 이해가 안되는게 널문자까지 포함한다 해도 c언어에서는 배열이 0부터 시작하니까 a[10]이어야 되는데 왜 a[11]인건가요? 아니면 소수점도 포함이라 12칸을 설정하는건가요?

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.