Tôi đang viết một chuỗi lớp tương tự như std :: string cho bài tập về nhà, nhưng tôi không thể tìm ra cách trả về chuỗi c không gây rò rỉ bộ nhớ và được bảo đảm giữ nguyên cho đến khi nó không còn được sử dụng nữa. Tôi hiện có:Làm thế nào để std :: string :: c_str() trả về một chuỗi c không gây rò rỉ bộ nhớ hoặc nội dung chuỗi không xác định?
const char* string::c_str()
{
char c[_size+1];
strncpy(c,_data,_size);
c[_size]='\0';
return c;
}
nhưng nội dung bị ghi đè ngay sau khi được gọi. Nếu tôi phân bổ động, tôi sẽ bị rò rỉ bộ nhớ hoặc chỉ có một chuỗi c có thể tồn tại từ một chuỗi đã cho bất kỳ lúc nào. Làm thế nào tôi có thể tránh điều này?
"* hoặc chỉ một chuỗi c có thể tồn tại từ một chuỗi đã cho bất kỳ lúc nào *" Đây là cách 'std :: string' hoạt động - vấn đề là gì? – ildjarn
Nếu 'strncpy()' là câu trả lời, có lẽ bạn đang [hỏi sai câu hỏi] (http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not- safer-strcpy.html). –
Tôi không nhận ra nó chỉ tồn tại cho đến khi thay đổi. Nó bây giờ hoạt động trong thời gian O (1). –