Tôi vẫn đang học C++, vì vậy hãy chịu với tôi. Tôi đang viết một trình bao bọc đơn giản xung quanh các đường dẫn hệ thống tập tin nâng cao - Tôi gặp phải các vấn đề lạ khi trả về các chuỗi tạm thời. Đây là lớp học đơn giản của tôi (đây không phải là chính xác, nhưng khá gần):Tạm thời std :: strings return junk
typedef const char* CString;
typedef std::string String;
typedef boost::filesystem::path Path;
class FileReference {
public:
FileReference(const char* path) : mPath(path) {};
// returns a path
String path() const {
return mPath.string();
};
// returns a path a c string
CString c_str() const {
return mPath.string().c_str();
};
private:
Path mPath;
}
Với mã thử nghiệm nhỏ dưới đây:
FileReference file("c:\\test.txt");
OutputDebugString(file.path().c_str()); // returns correctly c:\test.txt
OutputDebugString(file.c_str()); // returns junk (ie îþîþîþîþîþîþîþîþîþîþî.....)
Tôi khá chắc chắn điều này có để đối phó với temporaries, nhưng tôi không thể hiểu tại sao điều đó sẽ - không phải mọi thứ đều sao chép chính xác?
nguồn của 'OutputDebugString()' là gì? –
Đã gắn kết tại 'typedef''ing của riêng bạn' CString' ... – Blindy
@OttoAllmendinger - Nó là [Windows API] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362 (v = vs.85) .aspx). –