C++ 将文本文件读取为const char*有时有效,有时无效';T

C++ 将文本文件读取为const char*有时有效,有时无效';T,c++,file,C++,File,我试图读取一个简单的文本文件,该文件返回的内容为const char* 问题在于函数返回的类型。当我以std::string的形式返回文件内容时,没有问题,外部字符串变量将始终保留文件内容,但当我尝试以const char*的形式返回内容时,有时返回变量保留文件内容,有时则不保留。我处理这件事的方式根本不安全。我怎样才能修好它 static const char* readFile(const char* filePath) { std::ifstream file(filePath);

我试图读取一个简单的文本文件,该文件返回的内容为const char*

问题在于函数返回的类型。当我以
std::string
的形式返回文件内容时,没有问题,外部字符串变量将始终保留文件内容,但当我尝试以
const char*
的形式返回内容时,有时返回变量保留文件内容,有时则不保留。我处理这件事的方式根本不安全。我怎样才能修好它

static const char* readFile(const char* filePath)
{
    std::ifstream file(filePath);

    if (file.is_open())
    {
        std::string line;
        std::stringstream ss;

        //while(getline(file, line))[...] will result in the same issue.
        ss << file.rdbuf();

        file.close();

        std::string value = ss.str();
        return const_cast<char *>(value.c_str());
    }

    return nullptr;
}
static const char*readFile(const char*filePath)
{
std::ifstream文件(filePath);
if(file.is_open())
{
std::字符串行;
std::stringstream-ss;
//而(getline(file,line))[…]将导致相同的问题。

ss返回一个std::string。问题已解决。

这是未定义的行为,因为您基本上保证“免费后使用”。a
std::string
将其内容存储在分配的缓冲区中,它使用
c_str()
data()
方法返回一个
const
指针(在c++11及更高版本中保证).std::string
析构函数释放此分配的缓冲区,修改字符串(如调用deallocator)会使使用该缓冲区的行为变得未定义,因为内存可能已被释放。您需要将内容复制到新缓冲区,或返回实际的
std::string
。当我返回le的内容为std::string我没有问题,外部字符串变量将始终保留文件内容,--因此问题是,为什么您试图在使用
std::string
的初始解决方案中找到问题?它起作用了,应该已经足够好了——没有必要使用
char*
。有一个old笑话:“医生,当我用手做这件事的时候会很痛”——医生说,“好吧,不要对你的手做那件事!”这个回答让我想起了我有时在代码
I=I+1//increments I
中遇到的评论,你也应该说明原因。