Bạn sẽ nhận được rất nhiều kinda không chính xác câu trả lời về str.c_str()
tại đây. :) Trong khi c_str()
thực sự hữu ích, xin lưu ý rằng điều này sẽ không thực sự chuyển đổi chuỗi thành một char*
, nhưng thay vì trả lại nội dung của chuỗi dưới dạng const char*
. Và đây là một sự khác biệt lớn!
Điều quan trọng ở đây là con trỏ bạn nhận được từ c_str()
chỉ hợp lệ miễn là đối tượng string
nhất định tồn tại. Vì vậy, đây sẽ là khủng khiếp sai:
class Something {
const char* name;
public:
Something(const std::string& pname) {
this->name = pname.c_str(); /* wrong! the pointer will go wrong as the object from the parameter ceases to exist */
}
};
Vì vậy, nếu bạn muốn chuyển đổi, như trong: tạo ra một giá trị mới mà sẽ độc lập với bản gốc std::string
, sau đó bạn sẽ muốn làm một cái gì đó như này:
char* convert(const std::string& str) {
char* result = new char[str.length()+1];
strcpy(result,str.c_str());
return result;
}
Nhưng vẫn còn c_str()
sẽ khá đủ cho bạn trong hầu hết các trường hợp.Chỉ cần cố gắng suy nghĩ về thời gian của các vật thể.
Tại sao bạn muốn thực hiện việc này? – GManNickG
@GMan: có vô số lý do, nguyên nhân chính đang gọi hàm trong API C? –
@Gman Bởi vì tôi cần chuyển biến foobar sang hàm inet_pton của UDT chỉ lấy các biến kiểu char *. –