C 기본 문법 – 배열 – 2 – 문자열

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 언어는 다른 언어들과 달리 문자열을 조금 더 수동적으로 다뤄야 하지만,
그만큼 구조와 메모리에 대한 이해도 쑥쑥 올라가게 돼요!

🎯 문자열을 잘 다루는 건 실전 프로그래밍의 시작입니다.
이름, 아이디, 비밀번호, 메시지, 텍스트 분석 등 수많은 기능이 문자열과 연결돼 있어요!

다음 시간에는 배열과 포인터의 관계나,
더 나아가 함수와 배열의 상호작용에 대해서도 함께 알아보겠습니다 😊

오늘도 끝까지 함께 해주셔서 감사합니다!
코딩은 하나씩 제대로 익혀가면 금방 실력이 쌓인답니다 💻✨

답글 남기기