C++ 초급 - 6. 배열과 문자열 (4 - C-스타일 문자열 (char str[]))
2025. 2. 22. 13:38ㆍ프로그래밍 언어/C++
📌 6.4 C-스타일 문자열 (char str[])
C-스타일 문자열(C-style String)은 char 배열을 사용하여 문자열을 저장하는 방식이다.
C언어에서 사용되던 문자열 처리 방식으로, 문자 배열(char str[])을 활용하여 문자열을 저장한다.
C++에서는 std::string이 제공되지만, 저수준 문자열 처리나 기존 C 코드와의 호환성을 위해 C-스타일 문자열이 여전히 사용됨.
C-스타일 문자열은 문자 배열과 종료 문자(\0)로 구성되며,
문자열 조작을 위해 <cstring> 헤더의 여러 문자열 처리 함수를 활용한다.
📌 1. C-스타일 문자열 선언 및 초기화
🔹 (1) C-스타일 문자열 선언
💡 기본 문법
char 문자열이름[문자열길이] = "문자열";
💡 예제: C-스타일 문자열 선언 및 초기화
#include <iostream>
int main() {
char str1[] = "Hello"; // 자동으로 '\0' 포함됨
char str2[6] = "World"; // '\0' 포함 (길이는 +1)
char str3[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 명시적 초기화
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
std::cout << "str3: " << str3 << std::endl;
return 0;
}
🔹 출력 결과
str1: Hello
str2: World
str3: Hello
💡 설명
- char str1[] = "Hello"; → 자동으로 \0(널 문자)가 포함됨.
- char str2[6] = "World"; → 길이를 직접 명시(최소 문자 개수 + 1 필요).
- char str3[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; → 직접 초기화.
⚠ 주의
- char str[5] = "Hello"; → 메모리 초과 오류 발생 가능 (널 문자 포함 필요).
- char str[5] = {'H', 'e', 'l', 'l', 'o'}; → 널 문자 누락 시, 출력 오류 발생 가능.
📌 2. 문자열 입력 및 출력 (cin, cout, gets 등)
C-스타일 문자열을 입력받을 때는 cin 또는 gets를 사용할 수 있다.
🔹 (1) cin을 이용한 문자열 입력
- cin은 공백 이전까지만 입력을 받음.
💡 예제: cin으로 문자열 입력 받기
#include <iostream>
int main() {
char name[20];
std::cout << "이름을 입력하세요: ";
std::cin >> name; // 공백 이전까지만 입력됨
std::cout << "입력한 이름: " << name << std::endl;
return 0;
}
🔹 입력 예시
이름을 입력하세요: Alice Wonderland
입력한 이름: Alice
💡 설명
- "Alice Wonderland"을 입력하면 "Alice"까지만 저장됨(공백 이후는 무시).
🔹 (2) cin.getline()을 이용한 문자열 입력
- cin.getline()을 사용하면 공백 포함 문자열 입력 가능.
💡 예제: cin.getline()으로 문자열 입력 받기
#include <iostream>
int main() {
char sentence[50];
std::cout << "문장을 입력하세요: ";
std::cin.ignore(); // 이전 입력 버퍼 지우기
std::cin.getline(sentence, 50); // 최대 49개 문자 입력 (마지막은 '\0')
std::cout << "입력한 문장: " << sentence << std::endl;
return 0;
}
🔹 입력 예시
문장을 입력하세요: Hello World!
입력한 문장: Hello World!
💡 설명
- cin.getline(sentence, 50); → 최대 49개 문자 입력 가능('\0' 포함).
📌 3. strlen, strcpy, strcmp 등의 문자열 처리 함수
C-스타일 문자열은 <cstring> 헤더의 다양한 함수를 사용하여 조작할 수 있다.
🔹 (1) strlen() – 문자열 길이 반환
💡 예제: strlen() 사용
#include <iostream>
#include <cstring> // 문자열 처리 함수 포함
int main() {
char str[] = "Hello, World!";
std::cout << "문자열 길이: " << strlen(str) << std::endl; // 13 (널 문자 제외)
return 0;
}
🔹 출력 결과
문자열 길이: 13
🔹 (2) strcpy() – 문자열 복사
💡 예제: strcpy() 사용
#include <iostream>
#include <cstring>
int main() {
char source[] = "C++";
char destination[10];
strcpy(destination, source); // destination에 source 복사
std::cout << "복사된 문자열: " << destination << std::endl;
return 0;
}
🔹 출력 결과
복사된 문자열: C++
⚠ 주의
- destination 크기가 충분하지 않으면 오버플로우 위험.
🔹 (3) strcmp() – 문자열 비교
💡 예제: strcmp() 사용
#include <iostream>
#include <cstring>
int main() {
char str1[] = "apple";
char str2[] = "banana";
if (strcmp(str1, str2) == 0) {
std::cout << "두 문자열이 같습니다." << std::endl;
} else {
std::cout << "두 문자열이 다릅니다." << std::endl;
}
return 0;
}
🔹 출력 결과
두 문자열이 다릅니다.
💡 설명
- strcmp()는 동일하면 0, str1이 작으면 -1, 크면 1 반환.
📌 4. C-스타일 문자열과 std::string의 차이점
C++에서는 std::string을 사용하면 더 안전하고 편리하게 문자열을 다룰 수 있다.
비교 항목 | C-스타일 문자열 (char str[]) | std::string |
메모리 관리 | 수동(new[], delete[] 필요) | 자동 메모리 관리 |
크기 조절 | 고정 크기 (char str[100];) | 크기 자동 증가 (str += "text";) |
안전성 | 오버플로우 가능 | 안전한 사용 (at(), length()) |
기능성 | strcpy(), strcmp() 필요 | .append(), .compare() 등 제공 |
💡 예제: std::string을 사용한 문자열 처리
#include <iostream>
#include <string>
int main() {
std::string str = "Hello";
str += " World!"; // 문자열 추가
std::cout << "문자열 길이: " << str.length() << std::endl;
std::cout << "전체 문자열: " << str << std::endl;
return 0;
}
🔹 출력 결과
문자열 길이: 12
전체 문자열: Hello World!
📌 5. 정리
개념 | 설명 |
문자열 선언 | char str[10] = "Hello"; |
문자열 입력 | cin.getline(str, 50); |
문자열 길이 | strlen(str); |
문자열 복사 | strcpy(dest, src); |
문자열 비교 | strcmp(str1, str2); |
C++ 표준 문자열 사용 | std::string을 활용하여 더 안전하게 문자열 처리 가능 |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 7. 구조체와 클래스 (1 - 구조체 (struct)) (0) | 2025.02.22 |
---|---|
C++ 초급 - 6. 배열과 문자열 (5 - std::string (C++ 표준 문자열)) (0) | 2025.02.22 |
C++ 초급 - 6. 배열과 문자열 (3 - std::vector) (0) | 2025.02.22 |
C++ 초급 - 6. 배열과 문자열 (2 - 다차원 배열 (int matrix[3][3];)) (0) | 2025.02.22 |
C++ 초급 - 6. 배열과 문자열 (1 - 배열 (int arr[5];)) (0) | 2025.02.12 |