책 내용 질문하기
문자열 관련 질문
도서
2020 시나공 정보처리기능사 실기 : NCS 기반 전면 개편
페이지
156,207
조회수
239
작성일
2020-11-20
작성자
탈퇴*원
첨부파일

156쪽에서 char st[]= 'i am tom!'이 널 문자 때문에 문자열의 크기보다 1 큰 배열이 만들어진다고 알고 있습니다.

그런데 207쪽의 String str ='information!';

                       int n=str.length();에서 생성되는 문자열의 크기는 널 문자를 제외하고 만들어진다고 나와있습니다. 두 가지 상황의 차이점이 무엇인지 궁금합니다.  

답변
2020-11-23 10:19:31

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

 

st[]는 C언어 문자 배열이며,

str은 Java의 문자열 자료형(객체) 입니다.

 

2개를 정확히 구분해두세요.

 

둘 모두 "abc" 3문자를 저장한다고 가정하죠.

st[]의 경우 마지막 널 문자가 존재하여 다음과 같은 배열이 생성됩니다.

[ 'a', 'b', 'c', '\n' ]    \n - 널을 의미하는 특수문자

 

이때 배열의 길이를 반환하게 되면, 4가 나오게 되죠.

 

str의 경우 메모리를 뜯어보면 위의 st[]와 다를 바 없습니다.

다만 이것은 각 문자를 배열로 저장한 형태인 C언어와 다르게 문자열만을 위해 만들어진 자료형(String)이란 것을 감안하세요.

때문에 실제 메모리에는 널문자까지 함께 저장되지만 사용자에게는 abc만 저장된 것 처럼 보여줍니다.

"abc"

 

때문에 length로 길이를 반환해도 문자의 개수인 3만을 반환하게 되죠.

(문자 배열과 다르게 메모리를 뜯어보지 않는이상 String 자료형에서 널문자를 확인할 방법은 없습니다.)

 

행복한 하루되세요 :)

  • 관리자
    2020-11-23 10:19:31

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

     

    st[]는 C언어 문자 배열이며,

    str은 Java의 문자열 자료형(객체) 입니다.

     

    2개를 정확히 구분해두세요.

     

    둘 모두 "abc" 3문자를 저장한다고 가정하죠.

    st[]의 경우 마지막 널 문자가 존재하여 다음과 같은 배열이 생성됩니다.

    [ 'a', 'b', 'c', '\n' ]    \n - 널을 의미하는 특수문자

     

    이때 배열의 길이를 반환하게 되면, 4가 나오게 되죠.

     

    str의 경우 메모리를 뜯어보면 위의 st[]와 다를 바 없습니다.

    다만 이것은 각 문자를 배열로 저장한 형태인 C언어와 다르게 문자열만을 위해 만들어진 자료형(String)이란 것을 감안하세요.

    때문에 실제 메모리에는 널문자까지 함께 저장되지만 사용자에게는 abc만 저장된 것 처럼 보여줍니다.

    "abc"

     

    때문에 length로 길이를 반환해도 문자의 개수인 3만을 반환하게 되죠.

    (문자 배열과 다르게 메모리를 뜯어보지 않는이상 String 자료형에서 널문자를 확인할 방법은 없습니다.)

     

    행복한 하루되세요 :)

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