#16. 문자 배열
#문자 배열
일반적으로 char 변수 하나에는 하나의 문자만 들어간다.
그것을 쉽게 저장할 수 있도록 배열을 사용 하는 것이다.
char szBuff[10];
문자 배열의 경우 초기화 시에 큰따옴표(" ")를 사용한다.
char szBuff[10] = "Hello";
이때 문자 배열에는 다음과 같이 배열이 된다.
szBuff[0] = 'H';
szBuff[1] = 'e';
szBuff[2] = 'l';
szBuff[3] = 'l';
szBuff[4] = 'o';
szBuff[5] = '\0';
위와 같이 마지막 배열에는 '\0 ' 즉 NULL이 삽입되어있다.
이 '\0'이 하는 일은 문자열을 [0]부터 쭉 읽다가 \0을 만나는 순간 읽는 것을 정지 한다는 뜻이다.
따라서 저 상태에서 szBuff[2] = '\0'; 을 삽입 할 시에 He 까지만 출력되고 읽는 것을 중지한다.
#include <iostream>
using namespace std;
void main()
{
char szBuff[10] = "Hello";
cout << szBuff << endl;
cout << "================" << endl;
szBuff[2] = '\0';
cout << szBuff << endl;
}
이와같이 '\0' 의 자리도 있어야 하기 때문에
문자 배열에서는 문자의 자리와 NULL의 자리가 필요하다. (한칸이 추가적으로 더 필요하다)
즉, "Hello"를 문자배열에 저장 하려면 char c[5] = "Hello"; 가 아니라 char c[6] = "Hello"; 이어야 한다
위와 같이 출력 했을 때, 기존 int 의 배열과는 차이점이 있다.
int 의 배열의 경우에는
배열 int Arr[5] = {1,2,3,4,5}; 가 있을 때,
cout<<Arr; 를 하게 될 경우 주소 값이 나왔다.
하지만 문자배열의 경우 주소값이 아닌 문자가 출력 되는 것을 볼 수 있다.
이는 cout에서 하는 일인데, 출력할 데이터가 char* 인 경우 해당 주소에 있는 문자를 출력하게 된다.
#문자열 상수
문자열 상수는 " "에 작성되어 있는 문자열을 문자열 상수라고 한다.
ex) "Hello", "World" etc.
문자열 상수는 Data영역에 배열형태로 저장이 되며, 문자열이 사용된 위치에 Data영역의 주소가 반환되어 사용이 된다.
즉 "Hello" 라는 문자열상수가 있으면, 이 상수는 Data영역에 배열로 저장이 되며 주소값을 반환한다.
그 주소값을 포인터에 저장할 수 있다.
char* ptr = "Hello";
이때 등록된 문자열 "Hello"는 상수화 되기 때문에 값 변경이 불가능하다.
예를 들면 위 포인터에서 *(ptr+1) = 'E'; 를 입력하면 오류가 난다.
문자열 상수의 경우, 주소값을 변경하는 것은 가능하다.
위에서 ptr은 "Hello"의 주소값을 가지고 있지만,
ptr="World"; 로 변경이 가능하다.
즉, 문자열 상수의 경우 const char* szBuff[10]=""; 인 경우와 같고
문자배열의 경우 char* const szBuff[10]=""; 인 경우와 같다
문자열을 입력 받을 경우 문자배열을 사용해야한다.
#문자열 함수
1. 문자열 복사
strcpy_s(복사 받을 곳, 얼마나 작업할지 bytes, 복사 할 것)
ex)
char szDst[10] = "";
char szSrc[10] = "Hello";
strcpy_s(szDst, sizeof(szDst), szSrc);
2. 문자열 결합
strcat_s(결합 받을 곳, 얼마나 작업할지 bytes, 결합 할 것)
ex)
char szDst[10] = "Hello";
char szSrc[10] = "World";
strcat_s(szDst, sizeof(szDst), szSrc);
3. 문자열 비교
두 문자열이 같은지 비교 (비교해서 같으면 0 반환, 다르면 그 외의 숫자)
strcmp(1번문장, 2번문장)
ex)
char szDst[10] = "Hello";
char szSrc[10] = "World";
if(!strcmp(szDst, szSrc))
cout<<"두문장이 같다"<<endl;
4. 문자열 길이( NULL 제외 )
strlen(문장)
ex)
char szDst[10] = "Hello";
cout<<strlen(szDst)<<endl;
출력값 => 5