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;
}
'일하면서 사용한 짧은 지식 > C++, DirectX11' 카테고리의 다른 글
Handle Leak 디버깅 (0) | 2024.01.24 |
---|---|
DirectX11 COM 객체 메모리 누수 원인 추적하기 (0) | 2022.06.23 |
Direct2D에서 SetTransform으로 설정한 값 초기화하기 (0) | 2022.03.22 |
DirectX11의 Shader를 컴파일하여 헤더파일로 만들기 (0) | 2022.01.05 |
C++에서 인터페이스로 사용하기 위해 Class를 정의한다면, 소멸자에 virtual를 지정해 줘야 한다. (0) | 2022.01.03 |