gpt4 book ai didi

c++ - 奇怪的错误读取文件

转载 作者:行者123 更新时间:2023-11-30 02:32:07 24 4
gpt4 key购买 nike

我在 Windows 上用 mingw 编译并使用 gdb 调试我的应用程序。尝试从磁盘读取文件时得到此输出:

processfile (type=35633,
source=0xec4d6c "î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_"...) at main.cpp:5

这是我的读取文件函数:

const char* read_file_contents(const char* filename)
{
string ret = "";
string line;
ifstream ifs(filename);
if (ifs.is_open()) {
while (getline(ifs, line)){
ret += line + '\n';
}
} else {
std::cout << "failed to open file: " << filename << std::endl;
}

return ret.c_str();
}

这是我的主要内容:

#include <iostream>
#include "FileOps.h"

void test_func2(const char* test) {
std::cout << strlen(test) << std::endl;
std::cout << test << std::endl;
}

void test_func1(const char* test) {
test_func2(test);
}

int main(int argc, char** argv)
{
test_func1(read_file_contents("test.txt"));
return 0;
}

有人可以解释这种行为吗?谢谢!

最佳答案

这是未定义的行为。

 return ret.c_str();

ret 对象有一个局部函数作用域。当这个函数返回时,这个对象被销毁,它的所有内部内存都被释放。

c_str() 方法在对象被销毁后返回一个不再有效的指针。此函数一返回,c_str() 指针就不再有效。

c_str() 返回的指针仅在 std::string 对象被修改或被销毁之前有效。

关于c++ - 奇怪的错误读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com