책 내용 질문하기
정보처리실기 시나공 문의 p86 1번문제
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
86
조회수
289
작성일
2019-08-08
작성자
탈퇴*원
첨부파일

안녕하세요 정보처리기사 실기 공부중인 수험생입니다.

시나공 책으로 정보처리 기사 공부하던 중 이해가 되지 않는 부분이 있어 문의 드리고자 글 남깁니다.

p86 에 문제 1번에서 c 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오가 문제입니다.

 

제가 이해가 안되는 부분은 *str 이 되어야, kor 라는 문제가 나오는 것이 아닌가 합니다.

 

 

현재 문제 및 답안

char *str;   > 포인터 변수 선언

str = 'KOREA'; -> KOREA 문자열이 어디 메모리에 저장된 후 그 주소가 str에 기억됨

printf("8.3s/n', str) ;

 

답안: KOR

제가 생각하는 답안은 아래와 같이 포인터 표시가 있을 때 KOR 라는 데이터가 나오고 단순히 str 하면 그 KOREA를 저장한 메모리 주소가 나오는 것 같은데 왜 답안과 같이 데이터 값이 나오는 지 설명 부탁 드립니다.

printf("8.3s/n', *str) ;

 

답변
2019-08-08 14:23:45

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

 

포인터 변수 str은 두번째 줄 과정을 거치게 되면 아래와 같이 저장됩니다.

 

s[0] = K의 주소 (보통 아스키(ASCII)값이 저장됩니다.)

s[1] = O의 주소 

s[2] = R의 주소 

s[3] = E의 주소 

s[4] = A의 주소 

s[5] = 널값 (문자배열의 끝을 의미하는 값)

 

다음으로 알아야 하시는 것은 %s 서식문자 입니다.

%s 는 '문자'가 아닌 '문자열'을 출력하는 서식문자로 문자열의 시작 주소값을 입력받아 널값이 저장된 위치까지의 모든 문자열을 출력합니다.

 

때문에 %s가 서식문자열로 사용될때는 문자열의 시작값의 주소를 저장한 str을 사용해주어야 합니다.

값을 의미하는 *를 사용하여 출력하고 싶으시다면 %c를 사용할 수 있습니다.

 

for(int i=0; i<5; i++)

  printf("%c", *(str+i));

 

이런 식으로 쓸 수 있겠네요.

 

행복한 하루되세요 :)

  • 관리자
    2019-08-08 14:23:45

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

     

    포인터 변수 str은 두번째 줄 과정을 거치게 되면 아래와 같이 저장됩니다.

     

    s[0] = K의 주소 (보통 아스키(ASCII)값이 저장됩니다.)

    s[1] = O의 주소 

    s[2] = R의 주소 

    s[3] = E의 주소 

    s[4] = A의 주소 

    s[5] = 널값 (문자배열의 끝을 의미하는 값)

     

    다음으로 알아야 하시는 것은 %s 서식문자 입니다.

    %s 는 '문자'가 아닌 '문자열'을 출력하는 서식문자로 문자열의 시작 주소값을 입력받아 널값이 저장된 위치까지의 모든 문자열을 출력합니다.

     

    때문에 %s가 서식문자열로 사용될때는 문자열의 시작값의 주소를 저장한 str을 사용해주어야 합니다.

    값을 의미하는 *를 사용하여 출력하고 싶으시다면 %c를 사용할 수 있습니다.

     

    for(int i=0; i<5; i++)

      printf("%c", *(str+i));

     

    이런 식으로 쓸 수 있겠네요.

     

    행복한 하루되세요 :)

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