Chuyển tới nội dung chính

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

  1. Con trỏ trả về bởi c_str()const charT* (hoặc const 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.
  2. 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ặc delete[].
  3. 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ọi clear(), 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.
  4. c_str() trả về chuỗi ký tự C-style kết thúc bằng ký tự null (\0).
  5. Nếu chuỗi rỗng, c_str() trả về một con trỏ hợp lệ trỏ đến một ký tự null.
  6. 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

dataTrả 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
copySao 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
frontTrả về tham chiếu đến ký tự đầu tiên của chuỗi