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; }