배열문자열
char배열로 문자열을 저장할 수 있다.

char myStr[] = "string";

주의할점 : 마지막에 \0이 들어있다.
확인하는방법 : 아스키코드로 출력해보면 마지막에 0이 출력된다.

cout으로 출력하면 \0이 나타나면 출력이 멈춘다.

strcmp   : 문자열 비교할때 사용

strcpy_s : 문자열 복사할때 사용
strcat_s : 문자열 붙일때 사용

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
	char myStr[] = "string";

	for (int i = 0; i < 7; i++) {
		cout << myStr[i] << endl;
		cout <<(int) myStr[i] << endl;
	}

	myStr[255];
	cin.getline(myStr, 255);
	cout << myStr << endl;

	myStr[0] = 'A';
	cout << myStr << endl;

	int i = 0;
	while (true)
	{
		if (myStr[i] == '\0') break;

		cout << myStr[i] << " code : " << (int)myStr[i] << endl;
		i++;
	}
	
	char cpy[255];
	//strcpy(cpy, myStr);
	char myStr2[] = "Test !";
	strcpy_s(cpy, 255, myStr2);

	//문자열이 같으면 0출력 틀리면 -1출력
	cout << strcmp(cpy, myStr2) << endl;
	
	//문자열 붙이기
	strcat_s(cpy, myStr2);
	cout << cpy << endl;

	return 0;
}

문자열 심볼릭 상수

 

문자열은 기본적으로 문자의 배열이다.
배열은 포인터와 호환이 된다.

컴파일러가 헷갈리게 하는 부분을 조심하자.

심볼릭 상수는 그냥 특별하게 생각하자.

기호적인 상수로 선언할때 같은 문자열이라면 여러개 생성하지않고 같은 주소를 바라본다.

#include <iostream>

using namespace std;

int main()
{
	char a[] = "Jack Jack";
	//"Jack Jack"은 리터럴이다.
	//포인터는 메모리의 주소만 가르킨다.
	//메모리를 만들것인가 하는 정보가 없다.
	//char *name = "Jack Jack";

	//기호적인 상수처럼 사용할 수 있다.
	const char *name = "Jack Jack";
	const char *name2 = "Jack Jack";

	//컴파일러가 리터럴이 같을 경우 같이 메모리를 사용하게한다.
	cout << (uintptr_t)name << endl;
	cout << (uintptr_t)name2 << endl;
	cout << &name << endl;
	cout << &name2 << endl;

	int int_arr[5] = { 0 };
	char ch[] = "char";
	const char *ch2 = "char2";

	//cout에서 문자열은 특별히 처리한다.
	cout << int_arr << endl;
	cout << ch << endl;
	cout << ch2 << endl;

	char s = 's';
	cout << &s << endl;

	return 0;
}

+ Recent posts