inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

함수와 재귀함수 (v2)

섹션 3. 17강. 23:00 질문 있습니다.

해결된 질문

68

maritime23

작성한 질문수 4

0

python java c 정보처리기사

답변 2

0

주말코딩

printf("입력된 문자열: %c\n", str)

%c는 문자 그 자체를 출력하는 포맷이고, 주소가 오면 안됩니다.

배열의 이름 그 자체는 배열의 시작 주소를 가집니다. str은 뜯어보면 메모리 주소라는 것이죠.

 

그래서 결론적으로는 오류가 발생합니다.

그런 코드는 시험 문제에서 출제되지 않습니다.

#include <stdio.h>

int main() {
    char str[] = "this is string";
    
    printf("=== 1. %%s와 %%c의 차이 ===\n");
    printf("%%s로 출력: %s\n", str);
    printf("%%c로 출력: %c\n", str);  // ⚠️ 경고 발생! 이상한 문자 출력됨
    printf("\n");
    
    printf("=== 2. 올바른 %%c 사용법 ===\n");
    printf("첫 번째 문자만 출력: %c\n", str[0]);  // 't' 출력
    printf("두 번째 문자만 출력: %c\n", str[1]);  // 'h' 출력
    printf("\n");
    
    printf("=== 3. 메모리 주소 확인 ===\n");
    printf("배열 이름(첫 번째 요소 주소): %p\n", str);
    printf("str[0]의 주소: %p\n", &str[0]);
    printf("str[1]의 주소: %p\n", &str[1]);
    printf("str[2]의 주소: %p\n", &str[2]);
    printf("str[3]의 주소: %p\n", &str[3]);
    printf("\n");
    
    printf("=== 4. 각 문자 값과 주소 출력 ===\n");
    for (int i = 0; str[i] != '\0'; i++) {
        printf("str[%d] = '%c', 주소: %p\n", i, str[i], &str[i]);
    }
    printf("\n");
    
    printf("=== 5. 주소 차이 확인 ===\n");
    printf("str[0]과 str[1]의 주소 차이: %ld 바이트\n", 
           (long)(&str[1] - &str[0]));
    
    return 0;
}

 

온라인 컴파일러 기준으로 아래 출력문이 나옵니다.

메모리 주소는 환경에 따라 다르게 나오니까 무시하시고, 값만 보시면 됩니다.

=== 1. %s와 %c의 차이 ===
%s로 출력: this is string
%c로 출력: �

=== 2. 올바른 %c 사용법 ===
첫 번째 문자만 출력: t
두 번째 문자만 출력: h

=== 3. 메모리 주소 확인 ===
배열 이름(첫 번째 요소 주소): 0x7ffdca154b9d
str[0]의 주소: 0x7ffdca154b9d
str[1]의 주소: 0x7ffdca154b9e
str[2]의 주소: 0x7ffdca154b9f
str[3]의 주소: 0x7ffdca154ba0

=== 4. 각 문자 값과 주소 출력 ===
str[0] = 't', 주소: 0x7ffdca154b9d
str[1] = 'h', 주소: 0x7ffdca154b9e
str[2] = 'i', 주소: 0x7ffdca154b9f
str[3] = 's', 주소: 0x7ffdca154ba0
str[4] = ' ', 주소: 0x7ffdca154ba1
str[5] = 'i', 주소: 0x7ffdca154ba2
str[6] = 's', 주소: 0x7ffdca154ba3
str[7] = ' ', 주소: 0x7ffdca154ba4
str[8] = 's', 주소: 0x7ffdca154ba5
str[9] = 't', 주소: 0x7ffdca154ba6
str[10] = 'r', 주소: 0x7ffdca154ba7
str[11] = 'i', 주소: 0x7ffdca154ba8
str[12] = 'n', 주소: 0x7ffdca154ba9
str[13] = 'g', 주소: 0x7ffdca154baa

=== 5. 주소 차이 확인 ===
str[0]과 str[1]의 주소 차이: 1 바이트

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. maritime23님.

C 언어에서 printf 함수에서 사용되는 %c%s는 문자열 출력 방식에 있어 차이가 있습니다. printf("입력된 문자열: %s\n", str);str이 가리키는 문자열을 널(‘\0’) 문자를 만날 때까지 출력합니다. 반면에 printf("입력된 문자열: %c\n", str);를 사용하면, str이 가리키는 첫 번째 문자만을 출력하게 됩니다. 이는 str 배열의 첫 번째 문자의 값을 출력하는 것과 같습니다.

그러므로 만약 myString[]이 문자열 "this is string"을 담고 있다면, %s는 “this is string” 전체를 출력하고, %c는 문자열의 첫 번째 문자 ’t’만을 출력하게 됩니다. 이와 같은 방식으로 C에서는 문자열의 각 문자가 개별적으로 메모리에 저장되며, str은 이 문자들이 시작하는 주소를 가리킵니다.

이해를 돕기 위해 관련된 질문과 답변을 확인해 보시길 권장드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

영상 다운로드는 안되나요?

0

5

0

26년2회 실기기출은 언제쯤...

0

52

2

이론 공부법 요약본 버전 업데이트 문의

0

35

2

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

59

2

조건 반복문 질문: for 문 ?

0

66

1

정처기 26-2회. 9번 질문드립니다!

0

86

1

이론 보면서 질문이 있습니다.

0

82

2

정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문

0

93

2

유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)

0

155

2

262 정처기 실기 C언어코딩

0

53

1

정보처리기사 262 실기 Hash(해시) 질문

0

86

2

static 변수 질문입니다.

0

66

2

파이썬 4강 질문입니다.

0

73

2

모의고사 1회 3번문제

0

95

3

41강 30:10

0

70

2

이론 공부법 질문 있습니다.

0

96

2

부모의 생성자 관련 질문

0

70

2

시험지 문제에 필기해도 되나요?

0

92

3

41강 11:23

0

61

2

4강파이썬 질문입니다

0

58

2

try-catch 핸들러명

0

72

2

36강 3:48

0

70

2

35강 18:27

0

69

2

자식 코드 내 super() 생략

0

63

2