책 내용 질문하기
기출 따라잡기 질문
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
83
조회수
36
작성일
2018-09-22
작성자
탈퇴*원
첨부파일

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인가요?

감사합니다.

답변
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은 널값을 찾을 수 없어 메모리 위치에 따라 다른 값이 출력됩니다.

행복한 하루되세요.^^

  • *
    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은 널값을 찾을 수 없어 메모리 위치에 따라 다른 값이 출력됩니다.

    행복한 하루되세요.^^

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