Trong một trong các chương trình của tôi, tôi phải giao diện với một số mã kế thừa hoạt động với const char*
.
Giả sử tôi có một cấu trúc giống như sau:
struct Foo
{
const char* server;
const char* name;
};
Ứng dụng cấp cao hơn của tôi chỉ giải quyết vấn đề std::string
, vì vậy tôi nghĩ đến việc sử dụng std::string::c_str()
để lấy lại const char*
con trỏ.
Nhưng thời gian tồn tại là c_str()
gì?
Tôi có thể làm điều gì đó như thế này mà không phải đối mặt với hành vi không xác định không?
{
std::string server = "my_server";
std::string name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
// We use foo
use_foo(foo);
// Foo is about to be destroyed, before name and server
}
Hay tôi phải ngay lập tức sao chép kết quả của c_str()
đến một nơi khác?
Cảm ơn bạn.
.c_str()
. Tôi không hiểu lý do tại sao đôi khi tôi chỉ nhận được một phần của chuỗi, cho đến khi tôi hiểu rằngconst char*
không sống mãi mãi, nhưng cho đến khi chuỗi bị phá hủy