我有以下代码
const char * getFileName(std::string filePath, std::string theDestDirectory)
{
size_t lastOfParentDirectory = filePath.find_last_of("\\");
size_t extentionPos = filePath.substr(lastOfParentDirectory + 1).find_last_of(".");
std::stringstream convertedFilePath;
convertedFilePath << theDestDirectory << "\\" << filePath.substr(lastOfParentDirectory + 1).substr(0, extentionPos) << ".stl";
return convertedFilePath.str().c_str();
}
我要做的是获取新的文件路径并更改文件的扩展名。我需要输出类型为const char *,因为其他处理应该在char *
中答案 0 :(得分:3)
convertedFilePath
变量在getFileName
函数中是本地变量。一旦函数返回,流就被破坏了,它所拥有的字符串就被破坏了。这意味着您现在返回的指针指向一个被破坏的字符串,并且取消引用它将导致未定义的行为。
简单的解决方案当然是返回std::string
。如果您稍后需要const char*
,则可以始终在返回的对象上使用c_str
函数。
答案 1 :(得分:2)
在使用字符串之前,您只需返回指向已死的对象的指针。
std::stringstream convertedFilePath; // object start living
return convertedFilePath.str().c_str(); // return pointer to inside the object
} // the object convertedFilePath is dead and the memory is not longer usable
可能的解决方案: