1. 섹션7 문제1번 질문합니다.
printf("%8.3s\n", str)을 하면 KOR이 된다고 해설에 적혀있는데,
str을 출력하면 주소가 나와야 하고
*str을 출력해야 가리키는 값인 KOR이 나오는게 아닌가요?
비슷한 예제로 78page 예제에서는 b를 출력했을때는 주소가 나오고, *b를 출력했을때 가리키는 값이 나오는 것 같아서요.
2. 문제 2,4번을 풀다 든 질문입니다.
char test1[]=('a', 'b', 'c', 'd'}
char test2[]="abcd"
이 두개 배열이 어떻게 다른 건가요?
또한, strlen(test1)은 4이고, strlen(test2)은 5인가요?
감사합니다.
안녕하세요. 길벗 수험서 운영팀입니다.
1. *str을 출력해야 가리키는 값인 KOR이 나오는게 아닌가요?
[답변]
다릅니다.
해당 출력서식이 %s라는 것을 염두해 두셔야합니다.
%s는 '문자'가 아닌 '문자열'을 출력하는 서식문자입니다.
프로그래밍 언어에서 문자열은 기본적으로 배열과 같이 메모리에 순차적으로 저장된다는 것을 의미하기 때문에, 시작 주소만(*가 붙은 주소값이 아닌) 적어주면 해당 주소와 연결된 마지막 문자까지 모두 출력합니다.
2. 문제 2,4번을 풀다 든 질문입니다.
char test1[]=('a', 'b', 'c', 'd'}
char test2[]="abcd"
이 두개 배열이 어떻게 다른 건가요?
[답변]
동일합니다.
선언하는 형태만 다를 뿐 메모리에는 동일하게 저장됩니다.
다만, test2의 경우 마지막에 문자열이 종료된다는 의미로 널(NULL)값이 추가로 저장되겠네요.
3. strlen(test1)은 4이고, strlen(test2)은 5인가요?
[답변]
둘 다 아닙니다.
위의 예시에서 test1은 문자 배열입니다. test2는 문자열이죠. 문자열은 기본적으로 해당 문자가 종료되었다는 의미로 마지막에 널값(NULL)이 들어갑니다. 하지만 test1에는 존재하지 않죠.
printf("%s", test1 또는 test2); 로 출력하게 되면 둘 모두 동일한 abcd가 출력되겠으나, strlen으로 길이값을 출력하게 되면 test2는 널값 전까지의 4가, test1은 널값을 찾을 수 없어 메모리 위치에 따라 다른 값이 출력됩니다.
행복한 하루되세요.^^
-
*2018-09-27 17:47:40
안녕하세요. 길벗 수험서 운영팀입니다.
1. *str을 출력해야 가리키는 값인 KOR이 나오는게 아닌가요?
[답변]
다릅니다.
해당 출력서식이 %s라는 것을 염두해 두셔야합니다.
%s는 '문자'가 아닌 '문자열'을 출력하는 서식문자입니다.
프로그래밍 언어에서 문자열은 기본적으로 배열과 같이 메모리에 순차적으로 저장된다는 것을 의미하기 때문에, 시작 주소만(*가 붙은 주소값이 아닌) 적어주면 해당 주소와 연결된 마지막 문자까지 모두 출력합니다.
2. 문제 2,4번을 풀다 든 질문입니다.
char test1[]=('a', 'b', 'c', 'd'}
char test2[]="abcd"
이 두개 배열이 어떻게 다른 건가요?
[답변]
동일합니다.
선언하는 형태만 다를 뿐 메모리에는 동일하게 저장됩니다.
다만, test2의 경우 마지막에 문자열이 종료된다는 의미로 널(NULL)값이 추가로 저장되겠네요.
3. strlen(test1)은 4이고, strlen(test2)은 5인가요?
[답변]
둘 다 아닙니다.
위의 예시에서 test1은 문자 배열입니다. test2는 문자열이죠. 문자열은 기본적으로 해당 문자가 종료되었다는 의미로 마지막에 널값(NULL)이 들어갑니다. 하지만 test1에는 존재하지 않죠.
printf("%s", test1 또는 test2); 로 출력하게 되면 둘 모두 동일한 abcd가 출력되겠으나, strlen으로 길이값을 출력하게 되면 test2는 널값 전까지의 4가, test1은 널값을 찾을 수 없어 메모리 위치에 따라 다른 값이 출력됩니다.
행복한 하루되세요.^^