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

변수 str 에 저장된 값은 KOREA 가 아니라
KOREA가 저장된 주소 값이 아닌가요?

 

출력문에서

KOR 이 출력되려면

str 이 아니라..

*str이 되어야 하는거 아닌가요?

 

printf( "&8.3s\n", str);   =>

 

printf( "&8.3s\n", *str); 이 되어야 할 것 같은데

 

확인 부탁드립니다.

 

답변
2019-06-11 11:41:52

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

 

C에서 문자열을 처리하는 경우 항상 포인터 변수 또는 배열을 이용해야 합니다.

 

str이 선언될 때 포인터 변수로 선언되었다는 점을 잊지 마세요.

 

char *str; 을 통해 str은 포인터 변수로 선언되었고,

str= = "korea"; 를 통해 포인터 변수 str은 문자 'k' 'o' 'r' 'e' 'a' '\0' 이 저장된 위치의 시작주소를 기억하게 되었죠.

('\0'은 NULL을 가리키는 문자로 문자열의 끝을 의미합니다.)

 

또한 서식지정자 %s는 기본적으로 문자가 아닌 '문자열'을 출력하는 서식지정자이므로, 문자열의 시작주소값을 받아 NULL을 만날때까지 모든 문자를 출력합니다.

즉 str의 시작 주소인 'k'부터 '\0'의 바로 전인 'a'까지 korea 전부를 출력하게 되죠.

 

행복한 하루되세요 :)

  • 관리자
    2019-06-11 11:41:52

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

     

    C에서 문자열을 처리하는 경우 항상 포인터 변수 또는 배열을 이용해야 합니다.

     

    str이 선언될 때 포인터 변수로 선언되었다는 점을 잊지 마세요.

     

    char *str; 을 통해 str은 포인터 변수로 선언되었고,

    str= = "korea"; 를 통해 포인터 변수 str은 문자 'k' 'o' 'r' 'e' 'a' '\0' 이 저장된 위치의 시작주소를 기억하게 되었죠.

    ('\0'은 NULL을 가리키는 문자로 문자열의 끝을 의미합니다.)

     

    또한 서식지정자 %s는 기본적으로 문자가 아닌 '문자열'을 출력하는 서식지정자이므로, 문자열의 시작주소값을 받아 NULL을 만날때까지 모든 문자를 출력합니다.

    즉 str의 시작 주소인 'k'부터 '\0'의 바로 전인 'a'까지 korea 전부를 출력하게 되죠.

     

    행복한 하루되세요 :)

  • 관리자
    2019-06-12 14:27:02

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

     

    이전에 답변드렸던 서식지정자 %s의 특성을 다시 한 번 살펴보세요.

     

    서식지정자 %s는 기본적으로 문자가 아닌 '문자열'을 출력하는 서식지정자이므로, 문자열의 시작주소값을 받아 NULL을 만날때까지 모든 문자를 출력합니다. 

     

    즉, printf("%c", str[0]);

    printf("%c", str[1]); 

    printf("%c", str[2]); 

    printf("%c", str[3]); 

    printf("%c", str[4]); 

    해주는 것과 동일하죠.

    (자리수 제한 8.3을 제외하고 가정했을 때)

     

    만약 주소값을 출력하고자 한다면 %s가 아닌 %p 또는 %x와 같은 주소를 출력하는 타입의 서식지정자를 사용해야 합니다.

    (%d도 가능은 하겠으나, 실제 주소값은 16진수로 표현되기 때문입니다.)

     

    행복한 하루되세요 :)

  • *
    2019-06-11 20:32:37

    제가 말씀 드리는 말이 답변 주신 내용입니다..

     

    Printf("%8.3s\n", str

     

    이 실행되면 문자가 아니라

    문자가 위치한 주소값이 출력되는게 맞는거 아닌가요?

     

    교재 78페이지 예제 참조 부탁드립니다...

     

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