Todavía estoy aprendiendo C++, así que por favor tengan paciencia conmigo. Estoy escribiendo un envoltorio simple para mejorar las rutas del sistema de archivos. Tengo problemas extraños con la devolución de cadenas temporales. Aquí está mi clase simple (esto no es exacta, pero bastante cerca):Temporal std :: cadenas devolviendo basura
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;
}
Con el pequeño código de prueba a continuación:
FileReference file("c:\\test.txt");
OutputDebugString(file.path().c_str()); // returns correctly c:\test.txt
OutputDebugString(file.c_str()); // returns junk (ie îþîþîþîþîþîþîþîþîþîþî.....)
Estoy bastante seguro de que esto tiene que hacer frente a los temporales, pero No puedo entender por qué sería eso: ¿no debería todo estar copiando correctamente?
¿Cuál es la fuente de 'OutputDebugString()'? –
Cringed at 'typedef''ing your own' CString' ... – Blindy
@OttoAllmendinger - Es una [API de Windows] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362 (v = vs.85) .aspx) función. –