변수 str 에 저장된 값은 KOREA 가 아니라
KOREA가 저장된 주소 값이 아닌가요?
출력문에서
KOR 이 출력되려면
str 이 아니라..
*str이 되어야 하는거 아닌가요?
printf( "&8.3s\n", str); =>
printf( "&8.3s\n", *str); 이 되어야 할 것 같은데
확인 부탁드립니다.
안녕하세요 길벗수험서 운영팀입니다.
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페이지 예제 참조 부탁드립니다...