C 기본 문법 – 배열 – 2편: 문자열 완전 정복
안녕하세요, 여러분 😊
이번 시간에는 C 언어에서 정말 많이 사용되는 중요한 데이터 타입,
바로 **문자열(String)**에 대해 배워보겠습니다!
🧠 문자열은 마치 “문장이나 단어를 저장하는 상자”입니다.
C 언어에서는 문자열도 결국 문자형(char) 배열로 다뤄진다는 게 포인트예요!
다르게 말하면, “문자열 = 문자들의 배열 + 끝을 알리는 널문자(‘\0’)” 입니다.
지금부터 문자열의 선언, 입력, 출력, 비교, 주요 함수들까지!
실전 예제와 함께 자세하게 알려드릴게요! 💪
1. 문자열이란?
- 문자(char)들이 연속적으로 저장된 배열
- 반드시 **문자열의 끝에
'\0'
(널 문자)**가 포함되어 있어야 함 - 널 문자는 컴퓨터가 “여기서 문자열이 끝났다!”고 인식하는 역할
2. 문자열 선언 방법
(1) 배열로 직접 선언
char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
🎯 길이는 문자 수 + 1 (
'\0'
포함)
(2) 문자열 리터럴로 초기화
char str[] = "Hello";
"Hello"
는 자동으로\0
이 붙어요!
✅ 이게 가장 일반적이고 많이 쓰이는 방식입니다.
3. 문자열 출력
printf
사용
char str[] = "C Language";
printf("%s
", str);
%s
는 문자열을 출력할 때 사용하는 서식 지정자입니다.
4. 문자열 입력 받기
(1) scanf
사용
char name[20];
scanf("%s", name);
📛 단점: 공백 입력 불가!
"John Smith"
입력하면"John"
까지만 저장돼요.
(2) gets
함수 (❌ 사용 권장 X)
char name[20];
gets(name);
gets
는 공백 포함 가능하지만 보안 취약점이 있어 요즘은 거의 쓰지 않아요.
(3) fgets
함수 (✅ 추천)
char name[20];
fgets(name, sizeof(name), stdin);
🎯 공백 포함 문자열 입력 가능하고, 버퍼 오버플로우 방지에도 효과적입니다.
5. 문자열 비교
C에서는 문자열을 비교할 때 ==
사용 금지!
대신 strcmp
사용
#include <string.h>
if (strcmp(str1, str2) == 0) {
printf("같은 문자열입니다.
");
}
함수 | 설명 |
---|---|
strcmp(a, b) |
같으면 0, a가 크면 양수, 작으면 음수 |
strncmp(a, b, n) |
앞에서부터 n글자만 비교 |
6. 문자열 길이 구하기
#include <string.h>
char str[] = "Hello!";
int len = strlen(str);
printf("문자열 길이: %d
", len);
🎯
strlen()
은\0
은 포함하지 않고 글자 수만 세요!
7. 문자열 복사
strcpy
, strncpy
사용
char dest[20];
char src[] = "Coding";
strcpy(dest, src); // dest = "Coding"
strncpy(dest, src, n)
은 n글자만 복사 (버퍼 오버플로우 방지용)
8. 문자열 연결 (붙이기)
char str1[20] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2);
printf("%s
", str1); // "Hello, World!"
💡
strncat(str1, str2, n)
도 있고, 버퍼 크기 초과 주의하세요!
9. 문자열 예제: 로그인 시뮬레이션
#include <stdio.h>
#include <string.h>
int main() {
char id[20];
char pw[20];
printf("아이디 입력: ");
scanf("%s", id);
printf("비밀번호 입력: ");
scanf("%s", pw);
if (strcmp(id, "admin") == 0 && strcmp(pw, "1234") == 0) {
printf("로그인 성공!
");
} else {
printf("로그인 실패!
");
}
return 0;
}
📌 문자열 비교와 조건문을 활용한 대표적인 활용 예시예요!
10. 문자열 배열 (2차원 배열로 표현)
char fruits[3][10] = {
"Apple",
"Banana",
"Grape"
};
for (int i = 0; i < 3; i++) {
printf("%s
", fruits[i]);
}
🎯 문자열 여러 개를 배열에 담고 싶을 때는 2차원 배열을 사용합니다!
✅ 문자열 정리표
기능 | 함수 | 설명 |
---|---|---|
비교 | strcmp(a, b) |
문자열 a, b 비교 |
길이 | strlen(a) |
a의 글자 수 반환 |
복사 | strcpy(dest, src) |
src → dest로 복사 |
붙이기 | strcat(a, b) |
b를 a 뒤에 붙임 |
입력 | fgets(str, size, stdin) |
공백 포함 입력 가능 |
출력 | printf("%s", str) |
문자열 출력 |
⚠️ 문자열 사용 시 주의할 점
주의사항 | 설명 |
---|---|
반드시 \0 포함 |
문자열 끝에 \0 이 없으면 오류 발생 가능 |
버퍼 크기 확인 | 입력 시 배열 크기 초과하지 않도록 주의 |
== 비교 금지 |
문자열은 strcmp 로 비교해야 함 |
gets 함수 지양 | gets() 는 보안 문제로 사용하지 않는 것이 원칙 |
문자열 복사 시 공간 확보 | strcpy(dest, src) 는 dest 공간 충분히 확보되어야 함 |
마무리하며 💬
오늘은 C 언어에서 자주 등장하는 문자열 처리를 공부했습니다.
C 언어는 다른 언어들과 달리 문자열을 조금 더 수동적으로 다뤄야 하지만,
그만큼 구조와 메모리에 대한 이해도 쑥쑥 올라가게 돼요!
🎯 문자열을 잘 다루는 건 실전 프로그래밍의 시작입니다.
이름, 아이디, 비밀번호, 메시지, 텍스트 분석 등 수많은 기능이 문자열과 연결돼 있어요!
다음 시간에는 배열과 포인터의 관계나,
더 나아가 함수와 배열의 상호작용에 대해서도 함께 알아보겠습니다 😊
오늘도 끝까지 함께 해주셔서 감사합니다!
코딩은 하나씩 제대로 익혀가면 금방 실력이 쌓인답니다 💻✨