본문 바로가기

일하면서 사용한 짧은 지식/C++, DirectX11

C++에서 std::to_string으로 int를 string으로 변환, c_str()로 string에서 const char* 반환

1. 상황

GStreamer를 사용중에 GObject의 property를 설정할 필요가 있었다.

 

property를 설정하기 위해서는 g_object_set()의 두 번째 파라미터로 property이름을 const gchar* 형태로 넘겨줘야한다.

 

여기서 property 이름을 원하는 조건에 맞는 string값으로 조합할 필요가 있었다.

 

이때 C++로 string을 조작한 방법을 복습하기 위해 정리한다.

2. 사용했던 string 조작 방법

  1) std::to_string으로 int를 string으로 변환

 

  2) '+' 연산자string 합치기

 

  3) c_str()로 string에서 const char* 반환

3. 예제 코드 작성

#include <iostream>
#include <string>

void MakeStringAndShow();

int main()
{
	MakeStringAndShow();
}

void MakeStringAndShow()
{
	int number = 12;
	std::string stringNumber = std::to_string(number);

	// 시행 착오 /////////////////////////////////////////////////////////////////////////////////
	
	//const char* stringToChar = ("DeviceName" + stringNumber + "appendedName").c_str();
	 
	// 처음에 위와 같이 출력하려고 했으나 제대로된 문자열이 출력되지 않았다.
	// c_str()은 원본 객체가 담고있는 문자열에 대해 const char* 타입을 리턴한다.
	// 이 값은 원본 객체인 'string이 메모리를 재할당'받거나 'string 객체가 사라지는 순간' 무효화된다.
	// 그래서 메모리에 할당하지 않고 임시로 만든 문자열은 제대로 출력할 수가 없다.
	 
	//////////////////////////////////////////////////////////////////////////////////////////////

	std::string device = "DeviceName";
	std::string appendedString = "appendedName";

	std::string completeString = device + stringNumber + appendedString;

	const char* stringToChar = completeString.c_str();

	std::cout << stringToChar << std::endl;
}