[C++] 구조체, 그리고 str 관련 주요 함수


C언어를 배울 때에도 구조체를 배웠고, C++에서 다시 한번 배웠다.

내용은 C언어에 있는 것과 같았다.

// 캐릭터를 예시로 들 경우 선언 예

enum class E_job : unsigned char // 열거체 크기 : 자료형의 크기로 1바이트
{
	None, // 직업이 없는 상태
	Knight,
	Archer,
	Magician,
	End
};

struct player
{
	// 이 코드블록 안에 원하는 변수들을 선언한다.
	char	Name[32];
	E_job	Job;
	int	Attack;
	int	Armor;
	int	HP;
	int HP_Max;
	int	MP;
	int MP_Max;
	int	Level;
	char	c1;
	char	c2;
};

그래서 정수형 자료에는 아래와 같은 코드로 데이터를 넣어줄 수 있다.

	player	player1; // 구조체 선언

	player1.Job = E_job::Knight;
	player1.Attack = 20;
	player1.Armor = 15;
	player1.HP = 100;
	player1.HP_Max = 100;

하지만 아래와 같이 char 문자열에 넣어주려고 하면 에러가 발생한다.

// 에러 발생 코드

// player1.Name = "기사입니다";

C++ 에서 “기사입니다”를 작성할 경우 int 처럼 변수를 저장하는게 아니라 특정 메모리에다가 데이터를 작성한 뒤 메모리의 주소를 얻어오는 식으로 데이터를 가져오게 된다.

즉, 위 코드에서 필자가 시도하려고 했던 것은 int로 비유하면 아래와 같다.

	const int	Arr1[10] = {};
	int	Arr2;
	Arr2 = Arr1;

Arr1은 배열 주소값이고 Arr2는 변수인데 주소값에다가 변수를 다이렉트로 넣을 수 없다.



그렇다면 어떻게 해야할까?

player1.Name에 해당하는 주소에다가 “기사입니다” 주소에 있는 값을 복사해주는 식으로 넣어주어야 한다.

그 기능을 하는 함수가 바로 strcpy_s()이다.

// 사용예시

	strcpy_s("주소", "문자열");

	strcpy_s(player1.Name, "기사입니다.");

C++은 문자열과 관련된 여러가지 함수들을 제공해준다.
이 중에 많이 쓰이는 함수들을 모아보면

  • strcpy_s(A, B) : B 문자열을 A로 복사해주는 함수이다.
  • strcat_s(A, B) : A 문자열에 B 문자열을 붙여서 하나의 문자열로 만드는 기능이다.
  • strlen(A) : A 문자열의 길이를 얻어오는 함수이다.
  • strcmp(A, B) : A, B 두 문자열이 같은지 비교해주는 함수이다.
    이때, 같을 때 0, 길이가 A가 크면 1(양수)을, B가 더 크면 -1(음수)을 반환받는다.

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2