Ich lerne immer noch C++, also bitte bitte mit mir. Ich schreibe einen einfachen Wrapper um Boost-Dateisystempfade - ich habe seltsame Probleme mit der Rückgabe von temporären Strings. Hier ist meine einfache Klasse (dies ist nicht genau, aber ziemlich nah dran):Temporäre Std :: Strings zurückkehrenden Müll
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;
}
Mit dem kleinen Testcode unter:
FileReference file("c:\\test.txt");
OutputDebugString(file.path().c_str()); // returns correctly c:\test.txt
OutputDebugString(file.c_str()); // returns junk (ie îþîþîþîþîþîþîþîþîþîþî.....)
Ich bin mir ziemlich sicher, dass dies mit Provisorien zu tun hat, aber ich kann nicht herausfinden, warum das wäre - sollte nicht alles korrekt kopiert werden?
was ist die Quelle für 'Output()'? –
krümmte sich bei 'typedef''ing Ihre eigene' CString' ... – Blindy
@OttoAllmendinger - Es ist ein [Windows-API] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362 (v = VS.85) ASPX-) -Funktion. –