gpt4 book ai didi

C++字符数组分配错误

转载 作者:行者123 更新时间:2023-11-30 03:09:08 26 4
gpt4 key购买 nike

我有一个旨在获取文件内容的函数:

bool getFileContents(std::string loc, std::string &code) {
std::ifstream file(loc.c_str());

if(!file.is_open())
return err("Source file could not be read");

int length;
file.seekg(0, std::ios::end);
length = file.tellg();
file.seekg(0, std::ios::beg);

char *buffer = new char[length];
file.read(buffer, length);
code = buffer;
delete[] buffer;

file.close();

return true;
}

当我运行这个函数时,文件的长度总是被准确地检索到。但是,如果我用一个文件调用该函数一次,用一个不存在的文件再次调用它,然后用原始文件再次调用它,字符串 'buffer' 大于 int 'length'。

嗯,这可能不准确,而是 - 当字符串 'buffer' 被复制到字符串 'code' 时,'code' 比 'length' 长。在每个实例中,“代码”都是在调用“getFileContents”之前立即实例化的,因此这与先前的值无关。

如果我检索文件的内容,随后在文件中添加或删除一些文本,然后再次检索同一文件的内容,这似乎也会发生。

我对字符串没有什么经验,并且认为我没有正确使用它们,但我使用的代码来自一个示例,我终究找不到它有什么问题。

感谢您的帮助,怀亚特

最佳答案

好吧,问题在于 code = buffer 依赖 NUL (\0) 字符来了解缓冲区的结束位置。有时您可能会偶然获得 NUL 字符(尤其是当程序刚刚启动时),但并非总是如此。因此会出现间歇性行为。

尝试将 code = buffer 替换为 code = std::string(buffer, length)

关于C++字符数组分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352656/

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