책 내용 질문하기
문제1번 질문이요
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
86
조회수
129
작성일
2019-05-13
작성자
탈퇴*원
첨부파일
char *str; str = "KOREA"; printf("%8.3s\n", str); 이라고되어있습니다. Str 이 포인트변수로 선언되었으니까 두번째줄이 *str이되야하는거 아닌가요??? 3번째줄도 그렇구요 그냥 str만 나와있으면 korea라는 문자열이 있는 주소를 의미하는거 아닌가요??? 왜 그냥 str인지 이해가 안됩니다 답변부탁드립니다.
답변
2019-05-14 10:50:34

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

 

먼저 여기서는 포인터 변수가 배열로 사용되었습니다.

* 예를들어 a[5]의 변수명 a는 배열의 시작인 a[0]을 가리키는 포인터 변수 입니다.

* a는 &a[0]과 같으며, *a은 a[0]과 같습니다.

 

문자열(char[] 또는 char*)은 각 문자 하나하나가 배열의 각 요소에 저장되는 형식이죠. 

 

때문에 str="KOREA"; 는 아래와 같은 방식으로 이해하셔야 합니다. 

str = { 'K', 'O', 'R', 'E', 'A' };

이렇게 말이죠.

배열 자체에 저장되어야 하는 형태이니 *str 즉 str[0]에는 한 글자인 'K'밖에 들어갈 수 없으니, 전체 배열 형태인 배열명 str을 적어주는 것입니다.

 

char *str;

str = "KOREA";

char *str = "KOREA";

와 동일하며,

char str[] = "KOREA";

로도 바꿔쓸 수 있습니다.

 

문자열을 배열로 사용하는 방식은 일종의 약속이라, 원리라고 설명드릴 수 있는 것이 별로 없네요.

 

printf 또한 마찬가지입니다.

출력형식을 %s 로 하는 경우 해당 문자열(배열!)의 변수명(주소값이 되겠죠)을 적어줘야합니다.

이 경우 자동으로 해당 주소값을 가진 배열에 있는 모든 문자열을 출력하게 되죠.

%s 출력서식 자체가 주소값을 받아야 하기 때문에 *str을 적으면 에러가 발생합니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-05-14 10:50:34

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

     

    먼저 여기서는 포인터 변수가 배열로 사용되었습니다.

    * 예를들어 a[5]의 변수명 a는 배열의 시작인 a[0]을 가리키는 포인터 변수 입니다.

    * a는 &a[0]과 같으며, *a은 a[0]과 같습니다.

     

    문자열(char[] 또는 char*)은 각 문자 하나하나가 배열의 각 요소에 저장되는 형식이죠. 

     

    때문에 str="KOREA"; 는 아래와 같은 방식으로 이해하셔야 합니다. 

    str = { 'K', 'O', 'R', 'E', 'A' };

    이렇게 말이죠.

    배열 자체에 저장되어야 하는 형태이니 *str 즉 str[0]에는 한 글자인 'K'밖에 들어갈 수 없으니, 전체 배열 형태인 배열명 str을 적어주는 것입니다.

     

    char *str;

    str = "KOREA";

    char *str = "KOREA";

    와 동일하며,

    char str[] = "KOREA";

    로도 바꿔쓸 수 있습니다.

     

    문자열을 배열로 사용하는 방식은 일종의 약속이라, 원리라고 설명드릴 수 있는 것이 별로 없네요.

     

    printf 또한 마찬가지입니다.

    출력형식을 %s 로 하는 경우 해당 문자열(배열!)의 변수명(주소값이 되겠죠)을 적어줘야합니다.

    이 경우 자동으로 해당 주소값을 가진 배열에 있는 모든 문자열을 출력하게 되죠.

    %s 출력서식 자체가 주소값을 받아야 하기 때문에 *str을 적으면 에러가 발생합니다.

     

    행복한 하루되세요 :)

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