Xem ví dụ bên dưới:
void Animation::initAnimation(SDL_Renderer *pRenderer)
{
_pRenderer = pRenderer;
_pTexture = IMG_LoadTexture(_pRenderer, _sprite.getNameTexture());
}Sử dụng hàm IMG_LoadTexture để load ảnh, tham số thứ 2 của hàm này cần truyền vào kiểu char* do thư viện này đang viết bằng C mà project hiện tại đang base trên C++, như vậy cần các hàm chuyển đổi qua lại giữa 2 kiểu dữ liệu này string ↔ char*. Đây cũng là vấn đề tương thích C và C++.
Trường hợp cần lấy char*
void test(char *c)
{
cout << c;
}
int main()
{
string str = "A String";
// test(str); // error
return 0;
}Trong trường hợp trên cần truyền giá trị của biến str vào hàm test(). Tham số của hàm test() lại là kiểu char* trong khi str lại là kiểu string. Vậy gọi được hàm này phải chuyển đổi kiểu string sang char*.
Cách lấy char* từ string
string str = "Get const char* From string"; const char* str = str.c_str();
Đối tượng string (std::string) hỗ trợ một phương thức c_str() để lấy vùng nhớ thuộc tính kiểu const char* chứa chuỗi, nhưng dữ liệu này chỉ có thể đọc không thể thay đổi, nếu cần thay đổi cần sao chép dữ liệu này sang 1 chuỗi khác.
Code mẫu bằng C
#include <string>
using namespace std;
int main()
{
string str = "Convert string To char*";
char* c = new char[str.size() + 1];
strcpy(c, str.c_str());
delete[] c;
return 0;
}Trường hợp ngược lại - char* sang string
Trường hợp chuyển đổi từ char* sang std::string sẽ đơn giản hơn do string được hỗ trợ constructor và operator= để hình thành dữ liệu string từ char*.
#include <string>
using namespace std;
int main()
{
const char* c1 = "Convert char* To string 1";
const char* c2 = "Convert char* To string 2";
string str = c1;
str = c2;
return 0;
}