inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2027 대비!) 일주일만에 합격하는 정보처리기사 실기

함수와 재귀함수 (v2)

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

해결된 질문

82

maritime23

작성한 질문수 6

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은 이 문자들이 시작하는 주소를 가리킵니다.

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

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

정처기 2026-3 실기 문의

0

85

2

정처기 실기 3회 컴싸 사용 여부

0

54

1

모의고사 1 회 2번문제 중

0

73

2

26-2 이론문제 재탕

1

54

1

26-2년도 코드문제

0

38

0

26-2 코드문제

0

43

1

15분 48초 질문

0

60

2

26-1년도 이론문제 재탕

0

68

1

26-1년도 코드문제 재탕

0

48

0

이론재탕만 눈치챘어도

0

75

1

25-3년도 이론문제 재탕

0

59

1

25-3년도 코드문제 재탕

0

43

0

출력값 문의

0

56

2

25-2 분기커버리지

0

47

0

25-2 이론 재탕

0

70

1

25-1 이론 재탕

0

54

1

서브넷 마스크

0

54

2

모의고사 1회 계산문제 2개 맞았는데

0

70

2

업캐스팅 문제 예시 4번 부모 호출

0

51

2

모의고사 자료 해설이 너무 불친절하네요.

0

96

2

부모의 생성자 출력 관련

0

49

2

24-3 이론파트 재탕문제

0

58

0

누락코드

0

46

1

다차원 배열 포인터 질문있습니다

0

72

3