[C언어] %s, %c 정리

이승·2026년 4월 12일

[C언어]

목록 보기
1/3

C언어에서 %s, %c, \0 정리

C언어로 문자열을 다루다 보면 %s, %c, 그리고 \0 때문에 헷갈리는 경우가 많다.
처음에는 다 비슷해 보이지만, 실제로는 완전히 다른 개념이다.


1. %c : 문자 하나 출력

%c문자 1개(char) 를 출력할 때 사용한다.

#include <stdio.h>

int main() {
    char ch = 'A';
    printf("%c\n", ch);
    return 0;
}

출력:

A
  • 'A', 'b', '1' 같은 한 글자를 출력할 때 사용
  • 작은따옴표 ' ' 사용

2. %s : 문자열 출력

%s문자열(char 배열) 을 출력할 때 사용한다.

#include <stdio.h>

int main() {
    char str[] = "Hello";
    printf("%s\n", str);
    return 0;
}

출력:

Hello

문자열은 내부적으로 여러 개의 문자가 모여 있는 구조다.


3. %c%s 차이

구분%c%s
대상문자 1개문자열
자료형charchar[]
예시'A'"ABC"

4. %s를 문자에 쓰면 왜 안 되는가

char ch = 'A';
printf("%s\n", ch);  // 잘못된 코드

이 코드는 정상적으로 동작하지 않는다.

이유는 %s문자열의 시작 주소를 기대하기 때문이다.
하지만 ch는 단순히 문자 하나라서 주소가 아니라 값이다.

이 경우 잘못된 메모리를 읽게 되어 프로그램이 비정상적으로 동작할 수 있다.


5. \0 : 문자열의 끝

C언어에서 문자열은 길이를 따로 저장하지 않는다.
그래서 어디까지가 문자열인지 알기 위해 특별한 문자를 사용한다.

그게 바로 \0이다.

'\0'
  • ASCII 값 0
  • 문자열의 끝을 의미

6. 문자열의 실제 구조

char str[] = "ABC";

이 코드는 실제로 메모리에 이렇게 저장된다.

'A' 'B' 'C' '\0'

즉, "ABC" 뒤에는 자동으로 \0이 붙는다.


7. %s의 동작 방식

printf("%s", str);

동작 과정은 다음과 같다.

  1. 첫 번째 문자부터 출력 시작
  2. 계속 출력
  3. \0을 만나면 멈춤

그래서 \0이 없으면 어디까지 출력해야 할지 알 수 없다.


8. \0이 없을 때 문제

char str[] = {'A', 'B', 'C'};  // 잘못된 문자열
printf("%s", str);

이 경우:

  • 문자열 끝이 없음
  • 메모리를 계속 읽음
  • 이상한 값 출력 또는 프로그램 오류 발생

9. 정리

  • %c → 문자 하나 출력
  • %s → 문자열 출력
  • \0 → 문자열 끝을 나타내는 문자

C언어에서 문자열은 단순한 char 배열이 아니라
\0으로 끝나는 구조라는 점을 이해하는 것이 중요하다.


추가로 헷갈렸던 부분

처음에는 %s가 그냥 문자열 출력용이라서 문자에도 써도 될 것 같았는데,
실제로는 내부 동작이 다르기 때문에 정확하게 구분해서 써야 한다.

특히 %s는 주소 기반으로 동작한다는 점에서,
포인터 개념과도 연결된다는 걸 알게 됐다.

0개의 댓글