c언어

문자열 입력 시 한글과 배열 크기 주의사항

lsjking911 2026. 5. 31. 12:10

1. C에서 문자열의 기본 구조

  • char는 1바이트(1byte)를 의미한다
  • 문자열은 여러 개의 char를 이어서 저장한 배열이다
  • 문자열 끝에는 반드시 '\0'(널 문자)가 자동으로 붙는다

2. 영어와 한글의 차이

구분 크기
영어 1글자 1바이트
한글 1글자 약 2~3바이트 (UTF-8)

👉 중요한 점

❗ C에서는 글자 수가 아니라 바이트 크기 기준으로 저장된다


3. 한글 입력 시 문제 발생 원인

예:

입력: 임성준

👉 실제 메모리:

임 → 3바이트  
성 → 3바이트  
준 → 3바이트  

👉 총:

9바이트 + '\0' = 10바이트 필요

❌ 작은 배열 사용 시

char name[7];

👉 저장 공간:

7바이트

👉 실제 필요:

10바이트

👉 결과:

💥 버퍼 오버플로우 또는 문자열 깨짐 발생


4. scanf("%Ns")의 한계

scanf("%4s", name);

👉 의미:

최대 N바이트까지만 읽는다


❗ 문제점

  • 한글은 한 글자가 여러 바이트라서
  • 글자 중간에서 잘릴 수 있음

→ 결과:

문자 깨짐 (�)
입력 버퍼에 일부 남음
다음 scanf 오류 발생


5. 핵심 정리

  • %Ns는 글자 개수 제한이 아니라 바이트 제한
  • 한글은 멀티바이트라서 안전하지 않음
  • 문자열은 항상 \0까지 고려해야 함

6. 안전한 방법

✅ 방법 1 (가장 많이 사용하는 방법)

char name[256];
scanf("%255s", name);

👉 특징:

  • 충분히 큰 배열 → 오버플로우 방지
  • 한글 입력도 안전
  • 문자열 깨짐 없음

✅ 방법 2 (더 안전)

char name[256];
fgets(name, sizeof(name), stdin);

👉 특징:

  • 공백 포함 입력 가능
  • 배열 크기 기준으로 안전하게 입력

✅ ✅ 최종 한 줄 정리

C에서는 문자열이 바이트 단위로 처리되며, 한글은 여러 바이트를 사용하기 때문에 배열을 넉넉하게 설정해야 안전하게 입력을 처리할 수 있다.

 

'c언어' 카테고리의 다른 글

반복문과 증감 연산자 정리  (0) 2026.05.31
회원가입 프로그램  (0) 2026.05.31
scanf + 문자열 입력 +sizeof 정리  (0) 2026.05.30
int main(void)정리  (0) 2026.05.30
printf(화면에 값을 출력하는 함수)  (0) 2026.05.30