std::string::c_str
#include <string>
const charT* c_str() const noexcept;
Trả về một con trỏ đến một mảng ký tự chứa nội dung của chuỗi, được biểu diễn dưới dạng chuỗi ký tự kiểu C (C-style string), tức là kết thúc bằng ký tự null (\0
).
Tham số
Không có tham số
Giá trị trả về
const charT*
- Một con trỏ hằng trỏ đến mảng ký tự biểu diễn nội dung của chuỗi dưới dạng chuỗi ký tự C-style (kết thúc bằng ký tự null).
Đặc điểm
- Con trỏ trả về bởi
c_str()
làconst charT*
(hoặcconst char*
với std::string), bạn không thể thay đổi nội dung của chuỗi thông qua con trỏ này. - Con trỏ trả về bởi
c_str()
không được sở hữu bởi người gọi. Bạn không cần (và không được phép) giải phóng bộ nhớ cho con trỏ này bằng delete hoặcdelete[]
. - Con trỏ trả về bởi
c_str()
có thể bị vô hiệu hóa nếu đối tượng std::string bị thay đổi (ví dụ: gọiclear()
,insert()
,append()
,...) hoặc bị hủy. Sau đó, việc sử dụng con trỏ này sẽ dẫn đến hành vi không xác định. c_str()
trả về chuỗi ký tự C-style kết thúc bằng ký tự null (\0
).- Nếu chuỗi rỗng,
c_str()
trả về một con trỏ hợp lệ trỏ đến một ký tự null. c_str()
thường được sử dụng khi:- Bạn cần truyền chuỗi std::string đến các hàm chỉ chấp nhận chuỗi ký tự C-style (ví dụ: các hàm trong thư viện C chuẩn, các hàm API hệ thống).
- Bạn cần làm việc với các thư viện hoặc code cũ hơn không hỗ trợ std::string.
- Bạn cần tối ưu hóa cho các trường hợp mà việc sử dụng con trỏ trực tiếp đến mảng ký tự có thể hiệu quả hơn (ít gặp).
Ví dụ
#include <iostream>
#include <string>
#include <cstring> // Cần thiết cho strlen()
int main() {
std::string str = "Hello, world!";
// Lấy con trỏ đến chuỗi ký tự C-style
const char* cstr = str.c_str();
// Sử dụng con trỏ cstr với hàm strlen() của thư viện C
std::cout << "Length of C-string: " << std::strlen(cstr) << std::endl;
// In ra chuỗi sử dụng con trỏ cstr
std::cout << "C-string: " << cstr << std::endl;
// Chú ý: Không thay đổi nội dung chuỗi thông qua cstr
// cstr[0] = 'h'; // Lỗi: con trỏ trả về từ c_str() là const
return 0;
}
Các hàm liên quan
data | Trả về một con trỏ đến mảng ký tự bên trong mà std::string sử dụng để lưu trữ nội dung của chuỗi |
copy | Sao chép một chuỗi con của chuỗi hiện tại vào một mảng ký tự do người dùng cung cấp |
[] | Truy cập đến ký tự tại một vị trí cụ thể trong chuỗi |
front | Trả về tham chiếu đến ký tự đầu tiên của chuỗi |