안녕하세요 정보처리기사 실기 공부중인 수험생입니다.
시나공 책으로 정보처리 기사 공부하던 중 이해가 되지 않는 부분이 있어 문의 드리고자 글 남깁니다.
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) ;
안녕하세요 길벗수험서 운영팀입니다.
포인터 변수 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));
이런 식으로 쓸 수 있겠네요.
행복한 하루되세요 :)