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 |