将字符串流转换为char *

时间:2016-11-15 10:17:39

标签: c++

我有以下代码

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 *

上面的代码编译但是给出一个非现实输出output

2 个答案:

答案 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

可能的解决方案:

  1. 返回对象本身(convertedFilePath)
  2. 之前生成对象并将其作为对函数的引用传递给
  3. 将指针传递给char *,其指向的内存足够大 并将convertedFilePath.c_str()的内容复制到之前的区域 你的功能结束了